関数内で定義されたローカル変数は、その関数が宣言されている関数本体とそのネストされた関数内で常に定義され、関数のスコープ チェーン内には常にグローバル オブジェクトを指すオブジェクトが存在することは誰もが知っています。関数がグローバル変数にアクセスできるようにします。
var ga = 'global'; var func = function() { var la = 'local'; return function() { return function() { return function() { alert(la);alert(ga); } } } } a = func(); a()()();// 弹出 local 和 global
では、外部で定義された関数 A が関数本体内の関数 B によって呼び出された場合、A は B で定義されたローカル変数にアクセスできますか?答えは「いいえ」です。上記の例を次のように少し変更します
var ga = 'global'; function repeat() { alert(la); } var func = function() { var la = 'local'; alert(1); repeat(); alert(2); }; func();
上記の演算結果は 1 だけがポップアップします。repeat を呼び出すと、未定義の変数にアクセスするため、js インタープリターはエラーを報告し、プログラムを中断します。
その理由は、関数が定義されたときにスコープ チェーンを保存するためで、そのスコープ内に la というローカル変数が存在しないためです。したがって、エラーが報告されます。
つまり、ネストされた関数と、関数内でネストされた外部関数の呼び出しとの間には大きな違いがあります。
私は昨日、質問に答えるときに考えていました http://www.jb51.net/article/78958.htm 概念は理解していますが、関数内でrepeatを呼び出したいと常に思っていました。 ? 彼を呼び出す関数のローカル変数にアクセスできません 今日、もう一度参考資料を確認し、コードで自分でテストしました。この記事が同じ混乱を抱えている友人の助けになれば幸いです。