“将null或undefined强制成为全局对象的情况”

时间:2012-12-21 21:13:27

标签: javascript strict

John Resig wrote

  

最后,一个长期(并且非常烦人)的错误已经解决:将null或undefined强制转换为全局对象的情况。严格模式现在可以防止这种情况发生,并引发异常。

     

(function(){ ... }).call( null ); // Exception

他指的是什么错误?

1 个答案:

答案 0 :(得分:2)

基本上,您使用call()中的Function.prototype方法,默认情况下将范围作为第一个参数。如果执行范围是undefinednull,则默认为全局对象。在某些情况下,使用带有立即调用函数表达式的call方法(上面的代码相当不常见)不会将全局对象用作默认的回退执行范围。

如果在严格模式代码中评估此值,则this值不会强制转换为对象。 thisnullundefined未转换为全局对象,并且原始值不会转换为包装器对象。通过函数调用传递的此值(包括使用Function.prototype.applyFunction.prototype.call进行的调用)不会将传递的this值强制转换为Object(10.4.3,11.1。 ECMA语言规范的1,15.3.4.3,15.3.4.4条款)。