JavaScript のネストされた関数と、functions_javascript スキル内での外部関数の呼び出しとの違いの分析

WBOY
リリース: 2016-05-16 15:16:46
オリジナル
1328 人が閲覧しました

関数内で定義されたローカル変数は、その関数が宣言されている関数本体とそのネストされた関数内で常に定義され、関数のスコープ チェーン内には常にグローバル オブジェクトを指すオブジェクトが存在することは誰もが知っています。関数がグローバル変数にアクセスできるようにします。

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を呼び出したいと常に思っていました。 ? 彼を呼び出す関数のローカル変数にアクセスできません 今日、もう一度参考資料を確認し、コードで自分でテストしました。この記事が同じ混乱を抱えている友人の助けになれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート