0

なぜそれが起こっているのかよくわかりません。誰かが私にこれを説明できれば素晴らしいと思います。

だから私は次のコードを手に入れました:

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

そして、期待どおりに「はい」と警告します。しかし、私がそれをこのように拡張すると:

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

これも「yes」を警告し、ローカルスコープのテキスト変数を上書きすることを期待しています。しかし、代わりにそれは未定義を警告します。

これは現在の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 に答える