JavaScript-ForEach

标签 javascript

我有一个 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 不退出呢?

最佳答案

您不需要使用 thisself 或任何其他上下文来调用 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/

相关文章:

javascript - 每当我更新当前用户时,所有集合都会被刷新(实际上不是)

javascript - WebRTC 不显示远程媒体

javascript - 为什么我可以在注册之前触发和处理它?

javascript - 编辑 : How to import MP3 files in React app

javascript - 关于 JavaScript 变量的快速问题

javascript createElement/appendchild -- 单击后新文本消失

javascript - WebView.javaScriptEnable(true); android中的空指针异常错误

javascript - 传递 props 给 makeStyles react

javascript - Firebase 从集合中获取多个文档不起作用

javascript - 寻找制作此动画的 DRY 方法