Uncaught TypeError:在JavaScript中非法调用

我创build了一个lambda函数,用一个具体的参数来执行第二个函数。这个代码在Firefox中工作,但不在Chrome中,它的检查器显示一个奇怪的错误, Uncaught TypeError: Illegal invocation 。 我的代码有什么问题?

 var make = function(callback,params){ callback(params); } make(console.log,'it will be accepted!'); 

控制台的日志function期望this引用到控制台(内部)。 考虑这个复制你的问题的代码:

 var x = {}; x.func = function(){ if(this !== x){ throw new TypeError('Illegal invocation'); } console.log('Hi!'); }; // Works! x.func(); var y = x.func; // Throws error y(); 

这是一个愚蠢的例子,因为它将这个绑定到你的make函数的console上:

 var make = function(callback,params){ callback.call(console, params); } make(console.log,'it will be accepted!'); 

这也将起作用

 var make = function(callback,params){ callback(params); } make(console.log.bind(console),'it will be accepted!'); 

你可以将需要'this'的函数包装到一个新的lambda函数中,然后用它作为你的callback函数。

 function make(callback, params) { callback(params); } make(function(str){ console.log(str); }, 'it will be accepted!');