function t()
{
var x = 1;
if(true)
{
var x = 2;
alert(x);
}
alert(x);
}
t();
誰もがその理由を知っていますか?JavaScriptのスコープについては、なぜ次の21 21 22出力しないのですか?
function t()
{
var x = 1;
if(true)
{
var x = 2;
alert(x);
}
alert(x);
}
t();
誰もがその理由を知っていますか?JavaScriptのスコープについては、なぜ次の21 21 22出力しないのですか?
JavaScript(よくECMAScript)にブロックスコープ(yet)がないため。機能範囲のみ。
実際に関数の先頭に1つの変数宣言があるため、は初期値の1
を上書きしています。
function t()
{
var x = 1;
// v---------immediately invoked function to create a new scope
(function() {
// new variable scope
if(true)
{
var x = 2;
alert(x); // 2
}
})();
alert(x); // 1
}
t();
非常に楽観的ではない「まだ」。私はこれが変わることはないと思う。何十年ものコードを破るという悪夢を想像してみてください。編集:私は修正した、あなたの編集リンクは私が考慮しなかったいくつかの追加の洞察力を提供します。 –
@Anthony:コードがブラウザで実行されている場合、非常に真です。自立したJSエンジンのブラウザからは、楽観的な理由があります(または今日でも楽しむことさえあります)。 :o) – user113716
JavaScriptの変数は、ブロックではなく機能に限定されます。 var
が2つありますが、実際にはx
が1つのみです。あなたが持っているコードはこれに同じように動作しますので、
「VAR」キーワードは、全体関数内で適用されます。
function t() {
var x = 1;
if (true) {
x = 2;
alert(x);
}
alert(x);
}
t();
JavaScriptに歓迎:) – Jacksonkr