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