为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2021-12-30 11:07:58
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变量,既可以存变量,还可以存函数,但相同名称只能存在一个,后定义的覆盖前面的

查看完整回答
反对 回复 2022-01-04
?
明月笑刀无情

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了



查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 483 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信