TypeError.无法读取未定义的Javascript的'forEach'属性。无法读取未定义的Javascript属性'forEach'。

问题描述 投票:0回答:3

以下是我得到的代码 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) )

这很好用。

enter image description here

javascript node.js ecmascript-6 callback
3个回答
7
投票

由于函数后面没有分号,这段代码被解释为以下内容。

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)的规则是什么?


4
投票

你需要在变量声明的末尾加上一个分号。

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() 在这一点上。


2
投票

你的后面少了个分号 FunctionExpression.

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) )

而它的工作。


0
投票

我认为,与其说是 [1,2,3,4].forEach( x => print2(x, 20) ),你应该使用一个变量,比如 array.forEach(x => print2(x, 20));

例如下面的代码。

let array = [1,2,3,4];
const print2 = function(x, y) {
    console.log(x*y);
};

array.forEach( x => print2(x, 20) );
© www.soinside.com 2019 - 2024. All rights reserved.