我在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);
}
我不明白的是在这里做什么。如果我们没有它,我们是不是仍然会通过anon功能循环并安慰价值?这有什么关闭吗?我只想了解如何使用.call()以及为什么。
答案 0 :(得分:5)
call
调用特定上下文中的函数。在这种情况下,它将this
设置为animals[0]
和animals[1]
。没有它,函数上下文中的this
将不会被设置(或者它将被设置为window
)。