John Resig wrote:
最后,一个长期(并且非常烦人)的错误已经解决:将null或undefined强制转换为全局对象的情况。严格模式现在可以防止这种情况发生,并引发异常。
(function(){ ... }).call( null ); // Exception
他指的是什么错误?
答案 0 :(得分:2)
基本上,您使用call()
中的Function.prototype
方法,默认情况下将范围作为第一个参数。如果执行范围是undefined
或null
,则默认为全局对象。在某些情况下,使用带有立即调用函数表达式的call
方法(上面的代码相当不常见)不会将全局对象用作默认的回退执行范围。
如果在严格模式代码中评估此值,则this
值不会强制转换为对象。 this
值null
或undefined
未转换为全局对象,并且原始值不会转换为包装器对象。通过函数调用传递的此值(包括使用Function.prototype.apply
和Function.prototype.call
进行的调用)不会将传递的this
值强制转换为Object
(10.4.3,11.1。 ECMA语言规范的1,15.3.4.3,15.3.4.4条款)。