功能编程:在Chrome中打印到JS控制台

时间:2013-04-17 22:49:04

标签: javascript functional-programming

我正在使用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控制台上打印它,还是应该使用别的东西来编译代码?

3 个答案:

答案 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));

http://jsfiddle.net/th2A5/

对于不支持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控制台,但这取决于你。