jsのクロージャとループ

巴扎黑
リリース: 2016-12-06 09:53:41
オリジナル
897 人が閲覧しました

function box(){
  var arr = [];
  for(var i=0;i<5;i++){
    arr[i]=function(){
      return i;
    }
  }
  return arr;
}
var b = box();
console.log(b.length);
for(var i=0;i<b.length;i++){
  console.log(b[i]())
}
ログイン後にコピー

上記のコードは 5 5 を出力します

b[i]() は匿名関数を呼び出しますが、匿名関数自体は実行されないため、呼び出された時点で box() はすでに実行されています。 。 。 。

以下を変更します:

function box(){
  var arr = [];
  for(var i=0;i<5;i++){
    arr[i]=(
      function(num){
        console.log("ccc="+num)
        return num;
      }
    )(i)
  }
  return arr;
}
var b = box();
console.log(b.length);
for(var i=0;i<b.length;i++){
  console.log(b[i])
}
ログイン後にコピー

実行結果:

num=0
num=1
num=2
num=3
num=4
5
0
1
2
3
4
ログイン後にコピー

変更後、匿名関数はそれ自体の実行を許可され、最終的な b[i] は関数の代わりに配列を返します

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