それらの違いは何ですか?
①関数のスコープ -->②[[スコープ]]---->③スコープ
var scope = 'window';
var someFunction = function(){
something go here....
}
someFunction のスコープ
someFunction[[scope]]
ウィンドウ スコープ
はそうですか?
それらの違いは何ですか?
①関数のスコープ -->②[[スコープ]]---->③スコープ
var scope = 'window';
var someFunction = function(){
something go here....
}
someFunction のスコープ
someFunction[[scope]]
ウィンドウ スコープ
はそうですか?
スコープ チェーンを理解したい場合は、Richard Cornford のJavaScript Closuresに関する記事、特にIdentifier Resolution, Execution Contexts and scope chainの部分を読む必要があります。
簡単に言うと、スコープ チェーンは、変数/アクティベーション オブジェクトから変数/アクティベーション オブジェクトに移動し、グローバル オブジェクトで停止します (グローバル オブジェクトは事実上、グローバル実行コンテキストのアクティベーション/変数オブジェクトであるため)。
したがって、次の場合:
var fred;
function foo() {
alert(fred);
}
識別子fredは、グローバル変数/アクティベーション オブジェクト (グローバル コードの場合はグローバル オブジェクト自体) のプロパティになります。foo()が呼び出されると、グローバル オブジェクトを含むスコープ チェーンを使用して、新しい変数/アクティベーション オブジェクトが作成されます。識別子fredは最初に内部変数オブジェクトで解決され、そこには見つからないため、チェーンの次のオブジェクト (グローバル オブジェクト) が検索されます。
同様に:
function foo() {
function bar() {
alert(fred);
}
bar();
}
そのため、foo()が呼び出されると、次にbar( ) が呼び出され、fredは最初に bar の変数オブジェクト、次に foo、次にグローバル オブジェクトに対して解決されます。
実行コンテキストを理解すると、この「コンテキスト」の値を呼び出すことが誤解を招く理由もわかります。