2017-02-20 8 views
0
calValue: function (data) { 
      var self = this; 
      var values = data.values; 
      for (var i = 0; i < data.length; i++) { 
        if(data.condition == 0){ 
        (function (values) { 
          for (i = 0; i < values.length; i++) { 
          } 
        })(values) 
        } 
        else{ 
          //do sth else 
        } 
      } 
    } 

私の理解は、それぞれのコンテキストとその中で宣言されている変数は内部でのみ有効です。上記のコードスニペットのように、内側のforループ内の "i"変数は外側の "i"変数に影響を与えません。しかし、事実それは影響を及ぼします。javascriptの変数スコープ

誰かが説明してくれますか?ありがとう。

+2

これは、2番目の内部関数で 'i'を再宣言しないので、内部関数ではなく、外部関数から' i'を使用しているからです。 –

+0

ダニエルに感謝します。意味がある。 – connie

答えて

1

var宣言では、有効範囲はfunctionレベルです。このような宣言は、囲み関数の最初に現れたかのように解釈されます。

最新のJavaScript環境では、let宣言を使用して、ステートメントのローカルブロックにスコープされた変数を作成することができます。 (変更不可能なシンボルの場合はconst

あなたのケースでは、ネストされた関数の内部iは、外部で宣言されたiを参照しています。関数の内部からはいつでも "見る"ことができますが、 "見る"ことはできません。それがスコープの仕組みです。

+0

ありがとうございます。 – connie

関連する問題