值得指出的是,存在的console.log
實施行爲上的差異。在節點v0.10.19下,您不會收到錯誤;你只看到這一點:
> [1,2,3,4,5].forEach(console.log);
1 0 [ 1, 2, 3, 4, 5 ]
2 1 [ 1, 2, 3, 4, 5 ]
3 2 [ 1, 2, 3, 4, 5 ]
4 3 [ 1, 2, 3, 4, 5 ]
5 4 [ 1, 2, 3, 4, 5 ]
這是因爲回調forEach
是三個參數的函數取值,索引和數組本身。功能console.log
看到這三個參數並盡職盡責地記錄它們。
在Chrome瀏覽器控制檯,不過,你得到
> [1,2,3,4,5].forEach(console.log);
TypeError: Illegal invocation
在這種情況下,bind
將工作:
> [1,2,3,4,5].forEach(console.log.bind(console));
1 0 [ 1, 2, 3, 4, 5 ]
2 1 [ 1, 2, 3, 4, 5 ]
3 2 [ 1, 2, 3, 4, 5 ]
4 3 [ 1, 2, 3, 4, 5 ]
5 4 [ 1, 2, 3, 4, 5 ]
但有另一種方法:注意:第二個參數爲forEach
取值this
用於回調:
> [1,2,3,4,5].forEach(console.log, console)
1 0 [ 1, 2, 3, 4, 5 ]
2 1 [ 1, 2, 3, 4, 5 ]
3 2 [ 1, 2, 3, 4, 5 ]
4 3 [ 1, 2, 3, 4, 5 ]
5 4 [ 1, 2, 3, 4, 5 ]
其在Chrome的控制檯和節點對我的作品。當然,我敢肯定,你想要什麼僅僅是價值觀,所以恐怕最好的解決辦法是,確實是:
> [1,2,3,4,5].forEach(function (e) {console.log(e)});
1
2
3
4
5
無論節點的行爲是一個錯誤,或者是根本沒有的優勢事實上console.log
不是由ECMA規定的是在自己的權利有趣。但不同的行爲,你必須要知道你的回調是否使用this
是重要的,意味着我們必須回落到直接編碼,即使是冗長感謝關鍵字function
的事實。
你有錯誤的'this'。 – SLaks 2012-03-09 18:32:04
確實。將自己回答,我是一個白癡 – 2012-03-09 18:35:48
它可以被刪除嗎?這不是真的那麼有用=/ – 2012-03-09 18:38:02