我有一个 JavaScript 对象数组。像这样:
var people = [
{ id:1, firstName: 'Joe', lastName: 'Smith' },
{ id:2, firstName: 'Bill', lastName: 'Smith' }
];
我正在使用 forEach
遍历人员。这是我的代码:
function doSomething() {
people.forEach(function(person, self) {
self.helpPerson(person);
}, this);
}
function helpPerson(person) {
alert('Welcome ' + person.firstName);
}
我正在尝试从 forEach
循环中调用 helpPerson
。但是,当我尝试调用它时,出现一条错误消息:
TypeError: self.helpPerson is not a function
如果我添加 console.log(self);
,“0”会打印到控制台窗口。这意味着我没有正确传递我的参数。或者,我误解了闭包(就在我认为我完全理解它的时候:))。
那么,为什么 self
不退出呢?
最佳答案
您不需要使用 this
、self
或任何其他上下文来调用 helpPerson。直接调用它:
var people = [
{ id:1, firstName: 'Joe', lastName: 'Smith' },
{ id:2, firstName: 'Bill', lastName: 'Smith' }
];
function doSomething() {
people.forEach(function(person) {
helpPerson(person);
});
}
function helpPerson(person) {
alert('Welcome ' + person.firstName);
}
当您将 self
记录到控制台时,您会看到“0”,因为它正在打印循环迭代的索引。
参见 documentation forEach 查看传递给它的 forEach
函数的回调。
通常,self
用于捕获闭包中的上下文 (var self = this;
)。请参阅related links回答这个问题,因为这是一个非常重要的概念。
关于JavaScript-ForEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187035/