我正在使用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控制台上打印这个或者我应该用别的东西编译代码?

===============>>#1 票数: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文档页面上提供的填充程序

===============>>#2 票数: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);});

===============>>#3 票数: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]); a = ["a","b","c"]; for (i = 0; i < a.length; i++) console.log(a[i]);

我不建议使用JS控制台,但这取决于你。

  ask by andy4thehuynh translate from so

未解决问题?本站智能推荐: