以前我在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) }
有点疑问,为什么以前第一种写法没有报错呢?