我正在使用Eloquent Javascript将函数式编程实现到Google Chrome中的JS控制台。有一个函数循环遍历数组中的每个元素,并在初始参数中执行给定的操作。
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
forEach(["Wampeter", "Foma", "Granfalloon"], console.log);
我期待控制台打印出我的数组中的每个项目,但我得到了红色:
TypeError: 'Illegal Invocation'
有没有办法可以在我的js控制台上打印它,还是应该使用别的东西来编译代码?
答案 0 :(得分:2)
当您将其传递给forEach
时,该函数将丢失对其this
值(console
对象)的引用。以下应该有效:
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
forEach(["Wampeter", "Foma", "Granfalloon"], console.log.bind(console));
对于不支持bind
的浏览器,您可以使用MDN documentation page
答案 1 :(得分:1)
这对你有用......
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
forEach(["Wampeter", "Foma", "Granfalloon"], function(x) {console.log(x);});
答案 2 :(得分:0)
出于某种原因,Chrome的console.log似乎不能作为回调。
此代码似乎有效:for (item in ["a","b","c"]) console.log(item);
和a = ["a","b","c"]; for (i = 0; i < a.length; i++) console.log(a[i]);
我不建议使用JS控制台,但这取决于你。