Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要将窗口对象传递给模块模式?_Javascript - Fatal编程技术网

Javascript 为什么要将窗口对象传递给模块模式?

Javascript 为什么要将窗口对象传递给模块模式?,javascript,Javascript,下面是一个自动执行的匿名方法 将窗口作为全局窗口传递似乎是一种很好的做法。如果到处都有可用的窗口,为什么要这样做 (function (global) { /* my code */ global["someName"] = someObject; })(window); 它跳过了必须执行范围查找的代码,因为global在函数内部被限定了范围 编辑--这是一个性能优化。javascript中的作用域仅限于函数作用域全局在本例中是在该范围内定义的,因此当代码点击全局[…]时,它

下面是一个自动执行的匿名方法

将窗口作为全局窗口传递似乎是一种很好的做法。如果到处都有可用的窗口,为什么要这样做

(function (global) { 

 /* my code */ 

 global["someName"] = someObject; 

})(window);

它跳过了必须执行范围查找的代码,因为
global
在函数内部被限定了范围



编辑--这是一个性能优化。javascript中的作用域仅限于函数作用域<代码>全局在本例中是在该范围内定义的,因此当代码点击
全局[…]
时,它会查看它的直接范围(在函数内)并立即查找
全局
。否则,它将不得不向上移动到闭包范围,在本例中,闭包范围是全局javascript名称空间,并在整个范围内搜索
window

,浏览器的javascript解释器必须确定它找到的任何变量的范围,从最局部的范围开始向外搜索。使用带有
window
的函数闭包作为参数
global
减少了进一步向上扩展范围链以查找
window
的需要


窗口
在任何地方都可用,但使用示例中的
全局
方式更有效

对。你可以把
global
看作一个指向窗口的指针,就像说一个昵称比说一个人的法定姓名要快一样。@Delnan-如果你能做得更好,为什么不做呢?@HiroProgator为什么要浪费时间想办法“做得更好”并在它们永远不会有任何效果的时候实现它们?不同的开发人员以不同的规模工作。一些开发人员编写每周运行一次的代码,其他人编写每天运行数百万次的代码。根据规模,优化可能重要,也可能不重要。实用主义程序员的核心是了解与您正在编写的代码相关的细节,以您编写代码的规模,并关注这些细节。此外,我花时间研究的两个库都进行了优化—jQuery和主干