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!');