我不明白这个OP接受的答案的一部分:
Javascript function scoping and hoisting
作者说:
"
此外,在这种情况下,
function a() {}
行为与
相同var a = function () {};
”。
我知道函数表达式与函数声明不同,至少对于提升来说是不同的。为什么在这种情况下它们相似?
最佳答案
Why are they similar in this case?
因为var
被提升(但未设置),就像函数声明被提升一样,这意味着有一个 a
在 a = 10;
之前的本地范围内被评估,所以全局 a
永远不会被修改 - 标识符查找找到本地 a
首先这样设置
其他问题的相关部分
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
<小时/>Why is
a === 1
?
答案想说的是b
等于
function b() {
function a() {}
a = 10;
return;
}
类似于
function b() {
var a = function () {};
a = 10;
return;
}
即有一个标识符a
定义于 b
,所以
function b() {
var a = 10;
return;
}
现在,显然,全局 a
不会被 b
修改
请注意 var
的位置并不重要,只是它在那里,下面的代码会产生相同的行为
function b() {
a = 10;
return;
var a;
}
关于javascript - 为什么 `var a= function(){}` 在以下情况下与 `function a(){}` 相似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712889/