5
foo = "foobar";
var bar = function(){
    var foo = foo || "";
    return foo;
}
bar();`

このコードは、結果の空の文字列を返します。JS がグローバル変数と同じ名前のローカル変数を再割り当てできないのはなぜですか? 他のプログラミング言語では、期待される結果はもちろん「foobar」ですが、なぜ JS はそのように動作するのでしょうか?

4

2 に答える 2

27

これは、同じ名前のローカル変数を宣言したためであり、グローバル変数をマスクしています。したがって、記述するときfooは、ローカル変数を参照します。そのローカル変数の宣言の前に書いてもそうですが、JavaScript の変数は関数スコープです。ただし、グローバル変数がグローバル オブジェクト ( window)のプロパティであるという事実を利用できます。

var foo = window.foo || "";

window.fooここではグローバル変数を参照します。

于 2011-08-25T06:55:21.683 に答える
2

インタープリターがそれを確認すると、var fooそれはfooローカル変数であると見なされます。なんで?答えは簡単です。なぜなら、この言語はそのように構築されているからです。(いいえ、このように機能する言語はこれだけではありません)

于 2011-08-25T06:55:56.183 に答える