猿问

您好,下面内容,我不明白的是函数var又提前了,为什么var没有取代foo()函数?

js中下面的结果?我不明白的是函数提前了,var又提前了,为什么var没有取代foo()函数相同的function foo(){console.log(2)};却取代
function foo(){console.log(1)};

正文如下:
function foo(){console.log(1)};
foo();
function foo(){console.log(2)};
foo();
var foo=100;
console.log(foo);

侃侃无极
浏览 484回答 2
2回答

鸿蒙传说

你的代码输出是 2 2 100运行的时候,function先编译,所以第二个foo()覆盖了第一个,所以打出两个2var foo = 100; //赋值100,此时foo()函数已经不存在了,被替换成100了所以输出100一个var变量,既可以存变量,还可以存函数,但相同名称只能存在一个,后定义的覆盖前面的

明月笑刀无情

因为js 运行规律 是先定义变量,但不赋值,等所有的变量走完之后再重新走一遍赋值。例如先执行:var foo = undefined;var foo =  undefined;var foo = undefined;然后反过来再执行赋值:var foo = function(){    console.log(1)};var foo = function(){    console.log(2)};var foo=100;最后再执行: foo(); foo(); console.log(foo);又因  foo = 100;再函数执行的后面;所以只替换前一个foo函数。如果把函数执行的位置换一下:function foo(){console.log(1)}; function foo(){console.log(2)}; var foo=100;foo();foo();console.log(foo);//这样就替换了,所以该函数会报foo is not defined。// 因为foo函数被替换成100了
随时随地看视频慕课网APP
我要回答