3

ネストされた関数で構成される多くの関数を作成していることに気づきました。

Eclipse アウトライン ビューを使用すると簡単に見つけられるので、このパターンを使用するのが好きです。

var outer_func = function(){

  var inner_func1 = function(){
  //code
  }
  var inner_func2 = function(){
  //code
  }

}

私の質問: ネストされた/内部関数から var キーワードを削除した場合、スコープの違いはありますか?

アドバイスをありがとう。

4

3 に答える 3

1

innerキーワードを省略すると、andvarという名前のグローバル関数が作成されます。を保持します。inner_func1inner_func2var

于 2012-06-20T01:53:18.733 に答える
1

はい、外部関数が実行されると、「内部」関数はグローバルになります。一般に、関数宣言は最初に処理されるため、関数宣言を使用することをお勧めします。

function outer() {
  function inner() {
  }
  ...
}

後で関数を定義する必要がある場合、たとえば、後でまでわからない条件に基づいて、式を使用するだけです。

于 2012-06-20T01:54:48.500 に答える
1

関数は独自のドメインであり、ローカル変数は実行スタックのにのみ公開されます。(または、よく知られている「スコープ」と呼ばれるもの)変数が局所性なしで宣言されている (ローカルである) 場合、ウィンドウ (グローバル) オブジェクトに直接移動し、関数の完了時にゴミが収集されません。たとえば、次のようになります。

function somefunc(){
   var a;
   function nested(){
      a=2;//this will edit parent function's variable a
   }
   function anothernested(){
      var b=5;//this will create local variable in nested function
      c=3;//this will create global variable
   }
   nested();
   console.log(a);
}
于 2012-06-20T02:01:02.387 に答える