JavaScript スコープ ルールを理解しようとしています。私が教科書やドキュメンテーションで読んだことは紛らわしいです。
JavaScript は静的 (または字句) スコープの言語のようです。変数名を変数 (定義) にバインドしようとすると、コードの字句構造が使用されます。
実行コンテキストは、コール スタックのスタック フレームに似ているようです。各実行コンテキストには、(関連する関数の) すべてのローカル変数が定義される変数オブジェクトがあります。これらの変数オブジェクトは、スタックの一番上にある変数オブジェクトからスタックの一番下にある変数オブジェクト (ウィンドウ オブジェクト) への「スコープ チェーン」を提供するために互いにリンクされています。このスコープ チェーンは、変数名を変数にバインドする際に上から下に検索されます。これは、C/C++/Java などの静的スコープの言語に非常に似ています。
C/C++/Java に関して重要な違いが 1 つあります。次の例に示すように、スタック フレームがコール スタック上にない関数で定義された変数にアクセスできます。
var color = "red";
var printColor;
function changeColor() {
var color = "green";
printColor = function(msg) {
alert(msg + color);
}
printColor("in changeColor context, color = "); // "green"
}
changeColor();
// stack frame for "changeColor" no longer on stack
// but we can access the value of the variable color defined in that function
printColor("in global context, color = "); // "green"
私はこれを正しく理解していますか?他に注意すべき問題はありますか?
前もって感謝します