当console.log在函数中传递时出现非法调用错误

时间:2013-08-25 06:34:52

标签: javascript google-chrome

我对此感到困惑。 请找到如下代码。

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中的行为?

1 个答案:

答案 0 :(得分:12)

更改

o.printToConsole(console.log);

o.printToConsole(console.log.bind(console));

o.printToConsole(function(){ console.log.apply(console.log, arguments) });

console.log函数仅在接收者(this)是控制台时才起作用(实际上,它取决于浏览器)。