【发布时间】:2018-04-18 12:36:57
【问题描述】:
最近我对 javascript 提升行为感到困惑,现在我陷入了困境。
所以,有两个例子。
var alpha = 'alpha';
var beta = 'beta';
f(); //beta
var f = function f1() {
console.log(beta);
};
function f() {
console.log(alpha);
}
f(); // alpha
第一个按预期工作,因为当 Javascript 设置词法环境时,函数声明覆盖了我们的变量 f(值为“未定义”)。
但第二个给了我一个推动,我不明白的东西。
var alpha = 'alpha';
var beta = 'beta';
f(); // - alpha
function f() {
console.log(alpha);
}
var f = function f1() {
console.log(beta);
};
f(); // beta
为什么变量f没有被提升到代码的顶部,并且覆盖了我们之前提升的函数? 为什么在 “first f” 调用中我收到“alpha”。我认为,这一定是一个错误,例如: “f 不是函数”,因为在 first f 调用中,我预计 f 将是 "undefined"。
【问题讨论】:
-
技术上,两个sn-ps是一样的
-
您可能会发现this answer 很有用。
-
感谢所有回答。也许这个陈述可以帮助像我这样不理解这个东西的人:所以这涵盖了变量提升,但是函数提升呢?尽管两者都被称为“提升”,但行为实际上是完全不同的。与变量不同,函数声明不只是提升函数的名称。 它还提升了实际的函数定义。
标签: javascript function variables hoisting