0

我在 Mozilla 文档中看到了这个例子。有以下解释:

“在这个纯粹构造的例子中,我们创建了匿名函数并使用 call 在数组中的每个对象上调用它。这里匿名函数的主要目的是为每个对象添加一个打印函数,它能够打印正确的索引数组中的对象。将对象作为这个值传递并不是绝对必要的,而是出于解释的目的。

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);
}

我不明白的是在这里做的事情。如果我们没有它,我们不是还在循环通过匿名函数并安慰价值吗?这对关闭有什么作用吗?我只是想了解这里如何使用 .call() 以及为什么。

4

1 回答 1

5

call在特定上下文中调用函数。在这种情况下,它设置thisanimals[0]animals[1]。没有它,this就不会在函数的上下文中设置(或者更确切地说,它会设置为window)。

于 2012-10-04T18:55:00.350 回答