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);
2 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
你的代码输出是 2 2 100
运行的时候,function先编译,所以第二个foo()覆盖了第一个,
所以打出两个2
var foo = 100; //赋值100,此时foo()函数已经不存在了,被替换成100了
所以输出100
一个var变量,既可以存变量,还可以存函数,但相同名称只能存在一个,后定义的覆盖前面的
明月笑刀无情
TA贡献1828条经验 获得超4个赞
因为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了 |
添加回答
举报
0/150
提交
取消