javascript中的变量范围是什么?它们的内部是否与函数外部相同?或者甚至重要吗?另外,如果变量是全局定义的,那么它们存储在哪里?
我被问到一个问题
{
function foo() {
console.log('A');
}
foo();
foo = 1;
function foo() {
console.log('B');
}
foo = 2;
console.log(foo);
}
console.log(foo);Run Code Online (Sandbox Code Playgroud)
为什么第三个输出是1而不是2?
不应该foo创建块作用域,因为该块中既没有let也没有const。但是第二个foo输出2意味着确实foo已经创建了另一个引用。
到底是怎么回事?
PS 我正在使用 Chrome
Version 89.0.4389.90 (Official Build) (x86_64)。
var a;
if (true) {
a = 5;
function a() {}
a = 0;
console.log(a)
}
console.log(a)Run Code Online (Sandbox Code Playgroud)
我看到了上面的代码,在{}中声明了一个函数。我认为它会打印0 0,但它会打印0 5