2

约翰雷西格写道

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

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

他指的是什么错误?

4

1 回答 1

2

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

如果这是在严格模式代码中评估的,则该this值不会被强制转换为对象。or的this值不转换为全局对象,原始值不转换为包装对象。通过函数调用(包括使用and进行的调用)传递的 this 值不会将传递的值强制为(ECMA 语言规范的 10.4.3、11.1.1、15.3.4.3、15.3.4.4 条款)。nullundefinedFunction.prototype.applyFunction.prototype.callthisObject

于 2012-12-21T21:16:08.880 回答