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。
添加回答
举报
0/150
提交
取消