类型错误:无法读取未定义 Javascript 的属性“forEach”

新手上路,请多包涵

以下是我得到的代码 Cannot read property 'forEach' of undefined

 const print2 = function(x, y) {
  console.log(x*y)
}

[1,2,3,4].forEach( x => print2(x, 20) )

让我知道我在这里做错了什么,但如果我这样做 -

 function print2(x, y) {
  console.log(x*y)
}

[1,2,3,4].forEach( x => print2(x, 20) )

这工作正常。

在此处输入图像描述

原文由 Nesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 355
2 个回答

由于函数后没有分号,因此该代码段被解释为以下内容:

 const print2 = function(x, y) {
  console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )

这意味着它正在尝试索引到函数中。在函数之后或数组文字之前添加一个分号:

 const print2 = function(x, y) {
  console.log(x*y)
};

[1,2,3,4].forEach( x => print2(x, 20) )

或者

const print2 = function(x, y) {
  console.log(x*y)
}

;[1,2,3,4].forEach( x => print2(x, 20) )

有关 Javascript 的自动分号插入的更多信息,请参见: JavaScript 的自动分号插入 (ASI) 的规则是什么?

原文由 cbr 发布,翻译遵循 CC BY-SA 4.0 许可协议

变量声明的末尾需要一个分号。

 const print2 = function(x, y) {
  console.log(x*y)
};

[1,2,3,4].forEach( x => print2(x, 20) )

没有分号,它被视为

 const print2 = function(x, y) {
  console.log(x*y)
}[1,2,3,4].forEach( x => print2(x, 20) )

[1,2,3,4] 被解释为属性访问器,而不是数组,逗号运算符返回最后一个值 4 。由于该函数没有 4 属性,它返回 undefined ,然后您尝试调用 .forEach()

原文由 Barmar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题