我正在创建一个lambda函数,它使用具体的params执行第二个函数.这个代码适用于Firefox,但不适用于Chrome,它的检查器显示一个奇怪的错误,Uncaught TypeError: Illegal invocation.我的代码出了什么问题?
var make = function(callback,params){
callback(params);
}
make(console.log,'it will be accepted!');
Run Code Online (Sandbox Code Playgroud) 因为我很懒,我创建的函数log基本上只是以下的缩写console.log:
function log() {
console.log.apply(console, arguments);
}
Run Code Online (Sandbox Code Playgroud)
每当我打电话给我时,我会在Google Chrome的开发者工具中看到记录的项目,右侧是记录项目的行号.但是,此行号始终相同,因为实际console.log调用位于代码中的某个特定位置(即我声明上述log函数的位置).
我也尝试过的只是:
var log = console.log;
Run Code Online (Sandbox Code Playgroud)
但这总是会引发错误:Illegal invocation.很奇怪,但我猜这不可能.
如何console.log使用开发者工具显示log调用的行号而不是实际console.log调用的位置来创建快捷方式?
我对此感到困惑.请找到如下代码.
var o={
printToConsole: function(f){
f(1);
}
};
o.printToConsole(console.log);
Run Code Online (Sandbox Code Playgroud)
//TypeError: Illegal invocation//我得到一个TypeError
从console.log的定义我们得到了这个
`function log() { [native code] }`
Run Code Online (Sandbox Code Playgroud)
在chrome中,它清楚地显示它不需要任何参数,但是当我们尝试在控制台上打印东西时,我们会这样写,即将参数传递给console.log.
console.log('Take me on Console');
Run Code Online (Sandbox Code Playgroud)
为什么我得到这个TypeError以及这个console.log在chrome中的行为?