用外行术语解释.call().协助理解它

jam*_*non 0 javascript jquery

我在mozilla文档中看到了这个例子.以下解释:

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

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);
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是这里叫做什么.如果我们没有它,我们是不是仍然会通过anon功能循环并安慰价值?这有什么关闭吗?我只想了解如何使用.call()以及为什么.

Mar*_*ahn 5

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