在一次面试中,我被要求猜测以下代码片段的输出结果:
var foo = 1;
function bar() {
foo = 10;
return;
function foo() {
}
}
bar();
console.log(foo);
我原以为输出结果将是10,因为bar函数在重新分配foo的值后立即返回,但实际输出结果是1。这是因为函数定义中使用了相同的变量名(foo)吗?在bar内部会创建一个新的作用域用于foo变量吗?
bar()
中的foo
是定义函数,而不是来自父范围的变量。 - tarkhfoo
作为本地函数的名称被提升并覆盖了更高范围中的var foo
。 - Alex K.foo
。只要在函数作用域内有任何定义,全局作用域就不会受到影响。 - Jax-p10
。仅凭“看”代码无法确定。"fоo" === "foo"
- Lain