以前我在js里写log,一般是对console.log做个简单封装

var log = (window.console && console.log) || function(){};

但是今天发现log('a')这样的语句会报错

>log=console.log
function log() { [native code] }
>log('a')
TypeError: Illegal invocation

查了下,这篇文章讲的很详细,大意就是this作用域的问题,相对这些方法做别名的话,要用到apply、call等方法。

所以log函数应该这么写:

var log=function(){ window.console && console.log && console.log.apply(console, arguments) }

有点疑问,为什么以前第一种写法没有报错呢