我对此感到困惑。 请找到如下代码。
var o={
printToConsole: function(f){
f(1);
}
};
o.printToConsole(console.log);
//TypeError: Illegal invocation
//我得到一个TypeError
从console.log的定义我们得到了这个
`function log() { [native code] }`
在chrome中,它清楚地显示它没有任何参数,但是当我们尝试在控制台上打印东西时,我们会这样写,即将参数传递给console.log。
console.log('Take me on Console');
为什么我收到此TypeError以及此console.log在chrome中的行为?
答案 0 :(得分:12)
更改
o.printToConsole(console.log);
到
o.printToConsole(console.log.bind(console));
或
o.printToConsole(function(){ console.log.apply(console.log, arguments) });
console.log
函数仅在接收者(this
)是控制台时才起作用(实际上,它取决于浏览器)。