console.log()在控制台以外的对象上调用

Mic*_*ski 32 javascript this function-binding console.log

我记得,当我想console.log作为一个回调参数传递给某个函数时,除非我使用该bind()方法绑定console它,否则它不起作用.

例如:

const callWithTest = callback => callback('test');
callWithTest(console.log); // That didn't use to work.
callWithTest(console.log.bind(console)); // That worked (and works) fine.
Run Code Online (Sandbox Code Playgroud)

请参阅未捕获的TypeError:javascript中的非法调用.

但是,最近我发现console.log()即使调用除控制台以外的对象,它也能正常工作.例如:

console.log.call(null, 'test');
Run Code Online (Sandbox Code Playgroud)

日志'test'.

它何时以及为何会改变?规范是否说明了什么?

Mic*_*ski 13

编辑器的Console API草案曾经说过:

记录API应该都是可调用的函数,允许它们作为参数传递给错误处理回调,forEach方法等.

这不再包含在当前版本的规范中.

我认为Chrome和Node.js将其改变为在规范中工作,但它似乎在它之前就像它一样工作.

我还好奇它什么时候改变了,原因是什么.