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では、変数に関数レベルのスコープがあることに注意してください。