1

こんにちは、このコードが x 値ではなく関数を返す理由をお聞きしたいと思います。前もって感謝します。

function f() {
  function makeClosure(x) {

    return function(){
      return x;
    };
  }
  var a = [];
  var i;
  for(i = 0; i < 3; i++) {
    a[i] = makeClosure(i);
  }
  return a;
}
var a = f();
console.log(a[0]);
4

3 に答える 3

3

makeClosureは関数を返すため、配列aは関数で満たされています。

a[0]関数a[0]()を返します x を返します

于 2013-10-22T03:11:16.313 に答える
1

関数は配列f()を返します。

var a=f()で配列を代入しますa

これで、各配列要素自体が関数になります。したがって、配列内の任意の配列要素にアクセスすると、関数定義aにアクセスするだけで実行されません。

したがって、関数を実行するには、配列要素を関数として呼び出す必要があります。つまり、 in の代わりa[0]console.log(a[0]);使用する必要がありますconsole.log(a[0]());

理由はこれしかなかった…

于 2013-10-22T03:28:49.707 に答える
1

makeClosure見ると、それが を返す関数を返すことがわかりますx

ループ内で、a[i] = makeClosure(i);によって返された関数makeClosure(i)を配列のiインデックスに割り当てます。

配列内の特定のインデックスで関数を実行すると、関連するx値が返されます。

a[0]();返すべき0です。

于 2013-10-22T03:12:14.920 に答える