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

一道javascript 题目

一道javascript 题目

开满天机 2019-04-13 08:45:20
varfoo=1;functionbar(){foo=10;return;functionfoo(){}}bar();console.log(foo);//为什么是1而不是10一个类似的题目http://segmentfault.com/q/1010000000600770
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

varfoo=1;
functionbar(){
foo=10;
return;
functionfoo(){}
}
bar();
console.log(foo);//为什么是1而不是10
先分析一下每步流程:
第一步:varfoo=1;
全局变量foo被初始化赋值成1。
第二步:执行bar();方法。
第三步:bar()方法里,函数声明functionfoo(){}优先处理,这里JavaScript解析语法时(在运行之前)函数优先于一切。所以foo被初始化赋值为function(){};
第四步:执行foo=10;这里制造了一个假象,认为没有用var声明指向的是外层foo=1;。其实不是。而是先在自身函数体里找有没有foo声明,找到之前声明的functionfoo(){};赋值成10,只是局部变量的值改写。
第五步:输出foo,这时找的是全局变量varfoo=1;输出1。
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 347 浏览
慕课专栏
更多

添加回答

举报

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