foo = "foobar";
var bar = function(){
var foo = foo || "";
return foo;
}
bar();`
このコードは、結果の空の文字列を返します。JS がグローバル変数と同じ名前のローカル変数を再割り当てできないのはなぜですか? 他のプログラミング言語では、期待される結果はもちろん「foobar」ですが、なぜ JS はそのように動作するのでしょうか?
foo = "foobar";
var bar = function(){
var foo = foo || "";
return foo;
}
bar();`
このコードは、結果の空の文字列を返します。JS がグローバル変数と同じ名前のローカル変数を再割り当てできないのはなぜですか? 他のプログラミング言語では、期待される結果はもちろん「foobar」ですが、なぜ JS はそのように動作するのでしょうか?
これは、同じ名前のローカル変数を宣言したためであり、グローバル変数をマスクしています。したがって、記述するときfoo
は、ローカル変数を参照します。そのローカル変数の宣言の前に書いてもそうですが、JavaScript の変数は関数スコープです。ただし、グローバル変数がグローバル オブジェクト ( window
)のプロパティであるという事実を利用できます。
var foo = window.foo || "";
window.foo
ここではグローバル変数を参照します。
インタープリターがそれを確認すると、var foo
それはfoo
ローカル変数であると見なされます。なんで?答えは簡単です。なぜなら、この言語はそのように構築されているからです。(いいえ、このように機能する言語はこれだけではありません)