这是一个自动执行匿名方法。
在全球范围内传递窗口似乎是一种好习惯。如果窗口随处可用,为什么要这样做呢?
(function (global) {
/* my code */
global["someName"] = someObject;
})(window);
答案 0 :(得分:6)
它跳过了必须进行范围查找的代码,因为global
的范围是在函数内部。
编辑 - 这是一项性能优化。 javascript中的范围仅限于函数范围。在这种情况下,global
正在该范围内定义,因此当代码命中global[...]
时,它会查看它的直接范围(在函数内)并立即找到global
。如果没有它,那么它将不得不向上移动到闭包范围,在这种情况下是全局javascript命名空间,并搜索window
的整个范围。
答案 1 :(得分:2)
浏览器的JavaScript解释器必须确定它找到的任何变量的范围,从最本地范围开始并向外工作。使用window
作为参数global
的函数闭包减少了进一步向上扩展范围链以查找window
的需要。
window
随处可用,但在您的示例中使用global
的方式更具效果。