在一次采访中,我被要求猜测以下代码片段的输出:
var foo = 1;
function bar() {
foo = 10;
return;
function foo() {
}
}
bar();
console.log(foo);
我认为输出将是 10,因为 bar 函数在重新分配 foo 的值后立即返回,但实际输出是 1。是因为函数定义具有相同的变量名(foo)吗?是为以下对象创建的新范围foo
内部变量bar
?
这是在面试中提出的一个令人讨厌(而且有点毫无意义)的问题!
确实和功能有关系foo
在范围内bar
- 如果没有它,它就会达到您的预期。
var foo = 1;
function bar() {
foo = 10;
return;
}
bar();
console.log(foo);
原因是由于“提升”——内部的函数声明bar
被提升到函数的开头bar
作为一个新变量,并且由于 javascript 的性质允许您在运行时更改类型,因此它允许您设置它(而不是全局变量)foo
to 10.
它本质上与此代码相同:
var foo = 1;
function bar() {
var foo;
foo = 10;
}
bar();
console.log(foo);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)