【发布时间】:2018-09-25 15:26:31
【问题描述】:
我正在用 JavaScript 自己实现 forEach,唯一的目的是更好地理解语言。更具体地说,临时目标是更好地理解回调。
这就是我在卡住之前走了多远。
function myForEach(array, callback) {
for (let i = 0; i < this.length; i++) {
callback(array[i]);
}
}
function callback(element) {
console.log(element); //insert logic
}
const array = [2, 4, 6, 8, 10];
arr.myForEach(array, callback(element));
在节点中运行时出现以下错误:
ReferenceError: element is not defined
at Object.<anonymous> (C:\Users\Jonas\Desktop\FLEXBOX\test.js:54:31)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Function.Module.runMain (module.js:694:10)
at startup (bootstrap_node.js:204:16)
at bootstrap_node.js:625:3
我怀疑是因为在调用函数时,回调函数中作为参数给出的元素没有被创建。这是有道理的,但真正的 forEach 循环在被调用时并没有传入尚未创建的值?
arr.forEach((element /*does not exist yet?*/) => {
console.log(element);
});
我也尝试使用 lambda 调用该方法,但也没有得到正确的结果。但是一个不同的错误
arr.myForEach(array, (element) => {
console.log(element);
});
然后它给出错误:
TypeError: arr.myForEach is not a function
at Object.<anonymous> (C:\Users\Jonas\Desktop\FLEXBOX\test.js:58:5)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Function.Module.runMain (module.js:694:10)
at startup (bootstrap_node.js:204:16)
at bootstrap_node.js:625:3
【问题讨论】:
-
你引用的错误不是代码抛出的错误。你应该提供一个真实的minimal reproducible example
-
“我也尝试使用 lambda 调用该方法,但没有解决任何问题。” 这不正确,它解决了一个问题,但您的代码仍然包含一些错误/错误。
-
您的代码还有其他问题(现在没有时间输入完整答案),但最直接的问题是
element仅在callback中定义。相反,您应该将callback作为函数引用传递。
标签: javascript foreach