2016-06-14 82 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'正在被代码片段环境所覆盖,它并没有调用真正的浏览器。嗯..没想到那个。我将不得不再次测试/探索。 –