Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Illegal Invocation error when console.log passed in a function

I am bit confused over this. Please find the code as below.

var o={
 printToConsole: function(f){
   f(1);
}
};

o.printToConsole(console.log);

//TypeError: Illegal invocation// I get a TypeError

From the definition of console.log we get this

`function log() { [native code] }`

In chrome, which clearly displays that it doesn't take any argument, though when we try to print things on console we do write like this i.e. pass the argument to console.log.

console.log('Take me on Console');

Why I am getting this TypeError and how this console.log behaves in chrome?

like image 498
Mozak Avatar asked Aug 25 '13 06:08

Mozak


1 Answers

Change

o.printToConsole(console.log);

to

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

or

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

The console.log function only works when the receiver (this) is the console (in fact, it's browser dependent).

like image 70
Denys Séguret Avatar answered Oct 13 '22 02:10

Denys Séguret