0

この例は mozilla docs にあります。以下の説明とともに:

「この純粋に構築された例では、無名関数を作成し、呼び出しを使用して配列内のすべてのオブジェクトでそれを呼び出します。ここでの無名関数の主な目的は、すべてのオブジェクトに印刷関数を追加することです。これにより、正しいインデックスを出力できます。配列内のオブジェクトの.この値としてオブジェクトを渡すことは厳密には必要ではありませんが、説明のために行われます."

var animals = [
  {species: 'Lion', name: 'King'},
  {species: 'Whale', name: 'Fail'}
];

for (var i = 0; i < animals.length; i++) {
  (function (i) {
    this.print = function () {
      console.log('#' + i  + ' ' + this.species + ': ' + this.name);
    }
  }).call(animals[i], i);
}

私が理解していないのは、ここでコールが何をしているのかです。それがなかったら、anon 関数を循環して値を慰めているのではないでしょうか? これは閉鎖で何かをしますか?ここで .call() がどのように使用されているか、およびその理由を理解しようとしています。

4

1 に答える 1

5

call特定のコンテキストで関数を呼び出します。この場合は と に設定thisanimals[0]ていanimals[1]ます。これがないとthis、関数のコンテキストで が設定されません (または、 に設定されますwindow)。

于 2012-10-04T18:55:00.350 に答える