3 回答

TA贡献1877条经验 获得超1个赞
为什么窗口和文档被输入而不是正常访问?
通常,为了加强标识符解析过程,将它们作为局部变量可以提供帮助(尽管IMO的性能改进可以忽略不计)。
传递全局对象也是非浏览器环境中广泛使用的技术,您window
在全局范围内没有标识符,例如:
(function (global) { //..})(this); // this on the global execution context is // the global object itself
为什么heck未定义被传入?
之所以这样做是因为undefined
ECMAScript 3中的全局属性是可变的,这意味着某人可以更改其影响代码的值,例如:
undefined = true; // mutable(function (undefined) { alert(typeof undefined); // "undefined", the local identifier})(); // <-- no value passed, undefined by default
如果仔细观察undefined
实际上没有被传递(函数调用没有参数),这是获取undefined
值的可靠方法之一,而不使用该属性window.undefined
。
这个名字undefined
在JavaScript并不代表什么特别的,是不是关键字一样true
,false
等...,它只是一个标识符。
仅仅为了记录,在ECMAScript 5中,这个属性是不可写的......
将我们正在创建的对象直接附加到窗口是一个特别好的主意吗?
当您在另一个函数范围内时,这是用于声明全局属性的常用方法。

TA贡献1757条经验 获得超7个赞
我和你一起使用Crockford的风格。
回答你的问题
1.封装像这样的对象有什么特别的优势吗?
我能看到的唯一优势是通过创建窗口和文档局部变量而不是全局变量,你可以通过不能直接覆盖任何一个以及它们都是本地的一些性能增益来获得一些额外的安全性。
2.为什么窗口和文件被送入而不是正常访问?
以上解决。局部变量往往更快,但随着jit汇编这些天变得名义上。
为什么这个未定义被传入?
没有线索....
4.将我们正在创建的对象直接附加到窗口是一个特别好的主意吗?
可能不是,但我仍然坚持使用Crockford的模式,因为将函数附加到窗口对象会通过窗口对象将其暴露给全局堆栈的其余部分,而不是通过非标准命名空间公开它。
添加回答
举报