我正在创建一个lambda函数,该函数执行带有具体参数的第二个函数。此代码在Firefox中有效,但在Chrome中不起作用,其检查器显示一个奇怪的错误Uncaught TypeError: Illegal invocation。我的代码有什么问题?
Uncaught TypeError: Illegal invocation
var make = function(callback,params){ callback(params); } make(console.log,'it will be accepted!');
控制台的日志功能希望this(内部)引用控制台。考虑下面的代码,它可以复制您的问题:
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();
这是一个有效的示例,因为它绑定this到console您的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!');