var foo = 'bar';
console.log(window.foo); // bar
変数はプロパティとしてに割り当てられるようですがthis
、無名関数内でthis
は親スコープを参照しますが、変数は親スコープに割り当てられません。
function() {
var foo = 'bar';
}();
window.foo; // undefined
非グローバルスコープで変数はどのオブジェクトに割り当てられますか?
var foo = 'bar';
console.log(window.foo); // bar
変数はプロパティとしてに割り当てられるようですがthis
、無名関数内でthis
は親スコープを参照しますが、変数は親スコープに割り当てられません。
function() {
var foo = 'bar';
}();
window.foo; // undefined
非グローバルスコープで変数はどのオブジェクトに割り当てられますか?
http://perfectionkills.com/understanding-delete/#execution_contextを引用するには:
すべての実行コンテキストには、いわゆる
Variable Object
関連付けがあります。実行コンテキストと同様に、Variableオブジェクトは抽象エンティティであり、変数のインスタンス化を記述するメカニズムです。ここで、興味深い部分は、ソーステキストで宣言された変数と関数が実際にこのVariableオブジェクトのプロパティとして追加されることです。コントロールがグローバルコードの実行コンテキストに入ると、a
Global object
がとして使用されますVariable object
。これがまさに、グローバルに宣言された変数または関数がGlobal object
ただし、これらVariable Object
にはアクセスできません。唯一の非内部オブジェクトは、グローバルオブジェクト、window
またはthis
(グローバルコンテキストでは)です。
仕様の関連セクションは、#10:実行可能コードと実行コンテキストです。
JavaScriptでは、すべての変数が特定のスコープオブジェクトに割り当てられます。ただし、グローバル変数のスコープオブジェクトのみが、オブジェクトを介してブラウザのJavaScriptでアクセスできwindow
ます。関数スコープの変数は、JavaScriptランタイムによって内部的に使用されるスコープオブジェクトに割り当てられますが、ユーザーはこれにアクセスできません。
別の環境では、グローバル変数は別のオブジェクトのプロパティとしてアクセスできる場合(node.jsなどGLOBAL
)またはアクセスできない場合があります(Windows Script Host内で実行されているアプリケーションスクリプトなど)。
それらは、宣言されている関数でのみ使用できます。
関数スコープは、他の言語のブロックスコープとは異なり、JavaScriptの他の唯一のスコープ{}
です。)
Re:あなたの編集騙されないでくださいthis
--JSのセマンティクスは少し厄介なIMOです-this
さまざまな状況下であなたが期待するものではないかもしれません。
自己呼び出し無名関数の内部例:
function() {
....
}()
すべての変数はその中に残り、グローバルオブジェクトまたはにアタッチされませんwindow
。その手法を使用して、モジュール/シングルトンパターンなどのパターンが作成されます。
JSでは、変数に関数レベルのスコープがあることに注意してください。