我有一个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); }
我试图helpPerson
从forEach
循环内调用.但是,当我尝试调用它时,我收到一条错误消息:
TypeError: self.helpPerson is not a function
如果我添加console.log(self);
,"0"将打印到控制台窗口.这意味着我没有正确传递我的参数.或者,我误解了闭包(就在我认为我完全理解它的时候:)).
那么,为什么不self
退出呢?
你并不需要调用helpPerson用this
,self
或任何其他方面.只需直接调用它:
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",因为它正在打印循环迭代的索引.
请参阅forEach 的文档,了解哪些回调传递给它的forEach
函数.
通常,self
用于捕获closure(var self = this;
)中的上下文.请参阅此问题的相关链接,因为这是一个非常重要的概念.