一道javascript 题目

varfoo=1;
functionbar(){
foo=10;
return;
functionfoo(){}
}
bar();
console.log(foo);//为什么是1而不是10
一个类似的题目http://segmentfault.com/q/1010000000600770
开满天机
浏览 348回答 2
2回答

尚方宝剑之说

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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript