0

我不太确定为什么会发生这种情况,如果有人可以向我解释这一点,那就太好了。

所以我得到了以下代码:

var text = 'yes';
(function f() {
    alert(text);
})();

它会按预期提示“是”。但如果我像这样扩展它:

var text = 'yes';
(function f() {
    alert(text);
    var text = 'no';
})();

我非常希望这也会提醒“是”,然后覆盖本地范围内的文本变量。但相反,它会发出未定义的警报。

这是在当前的 Chrome 和 Firefox 中测试的,所以这似乎是一种想要的行为?!

4

2 回答 2

6

变量(和函数)声明被提升到范围的顶部。所以你的代码相当于:

var text = 'yes';
(function f() {
    var text;    // shadows the outer variable; initialised with `undefined` 
    alert(text); // still undefined
    text = 'no'; // now it has the value 'no'
})();
于 2012-08-17T12:16:23.287 回答
1

您将其声明为该范围内的新变量,因此它不会覆盖。尝试:

var text = 'yes';
(function f() {
    alert(text);
    text = 'no';
})();

演示

于 2012-08-17T12:16:21.307 回答