一尘不染

未捕获的TypeError:JavaScript中的非法调用

javascript

我正在创建一个lambda函数,该函数执行带有具体参数的第二个函数。此代码在Firefox中有效,但在Chrome中不起作用,其检查器显示一个奇怪的错误Uncaught TypeError: Illegal invocation。我的代码有什么问题?

var make = function(callback,params){
    callback(params);
}

make(console.log,'it will be accepted!');

阅读 278

收藏
2020-05-01

共1个答案

一尘不染

控制台的日志功能希望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();

这是一个有效的示例,因为它绑定thisconsole您的make函数中:

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