2016-06-14 85 views
0

我想知道爲什麼下面的代碼給出了一個Illegal Invocation錯誤非法調用,lodash

_.flow(console.log) (123) // Illegal Invocation 

function log(){ _.each(arguments, function(o) { console.log(o) }); } 
_.flow(log) (123) // 123 

與lodash v4.13.1

在Chrome版本49.0.2623.112(64位)運行此我是在Chrome上的開發人員工具上運行這個,按Ctr+Shift+Jlodash's documentation page

回答

0

根據反饋更新了答案。

console.log必須正確調用 - 換句話說,調用時必須具有正確的this值。調用它作爲console的方法是一種方法,但bind也可以使用。

示例代碼(從我的瀏覽器的控制檯獲取)

// Give us a test function 
function ctest(console) { console("It worked") } 
ctest(console.log); // This fails 

// Set up a properly bound reference 
var clog = console.log.bind(console); 
ctest(clog); // This works. 

舊片段中刪除

+0

感謝的我更新的問題。我很驚訝你的代碼片段正在工作。這讓我更感興趣。 – jkris

+0

好的我在挖掘的時候發現了一些東西,它代表着你的代碼段不應該工作,但顯然它是......你的祕密是什麼! http://stackoverflow.com/questions/8159233/typeerror-illegal-invocation-on-console-log-apply – jkris

+0

我敢打賭,區別在於:''console.log'正在被代碼片段環境所覆蓋,它並沒有調用真正的瀏覽器。嗯..沒想到那個。我將不得不再次測試/探索。 –