(function( window, undefined ) {})(window);
这个,为什么要将window和undefined作为参数传给它?
(function( $, undefined ) {})(jQuery); 同理
因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined。
还有,不要用window.undefined传递给形参,有可能window.undefined被其他人修改了,最好就是甚么都不传,形参的undefined就是真正的undefined了。
Js代码 : 
var undefined = 8;  
(function( window ) {   
alert(window.undefined); // 8  
alert(undefined); // 8  
})(window);  
Js代码 : 
var undefined = 8;  
(function( window, undefined ) {   
alert(window.undefined);  // 8  
alert(undefined); // 此处undefined参数为局部的名称为undefined变量,值为undefined  
})(window);  
区分上述两种方式:第一种每个语句都要去找一次window。第二种将window作为参数传递过去,是的不要每个语句都去找window,应该是提高了效率。 所以后者,就算外面的人把 undefined 定义了,里面的 undefined 依然不受影响。大概是为了最大程度防止外界的变量定义对所做封装的内部造成影响吧。
Js代码:  
//方式一  
(function(undefined ) {  
window.property1 = ……;  
window.property2 = ……;  
……  
})();  
//方式二  
(function( window, undefined ) {  
... // code goes here  
})(window);  
//方式三  
(function(undefined ) {  
var tmp = window;  
tmp.property1 = ……;  
tmp.property2 = ……;  
……  
})();  
方式一的效率明显最低,方式二和方式三应该差不多。将window作为参数传递进去就可以让代码里面的语句可以直接用参数中的window,而不用再去找最外层的对象。假如要在函数中为window再设置 100000个属性,用参数传递过去只需要找一次最外层对象。不用参数传递,用到window的语句都要去找一次最外层对象。

转载于:https://www.cnblogs.com/barryli/p/3188805.html

JS 关于(function( window, undefined ) {})(window)写法的理解相关推荐

  1. js中(function(){…})()立即执行函数写法理解

    js中(function(){-})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...

  2. 关于js中function(e) e的理解

    e是事件,在firefox中只能在事件现场使用window.event,所以只有把event传给函数使用. 为了兼容FF和其它浏览器,一般会在函数里重新给e赋值: e = window.event | ...

  3. JS 中的 event?event:window.event什么意思?求详解。

    JS 中的 event?event:window.event什么意思?求详解. 2013-04-16 00:01flying607 | 分类:JavaScript |浏览813次 <script ...

  4. js中DOM, DOCUMENT, BOM, WINDOW 区别

    全栈工程师开发手册 (作者:栾鹏) js系列教程6-BOM操作全解 js系列教程7-DOM操作全解 js中DOM, DOCUMENT, BOM, WINDOW 区别 DOM 全称是 Document ...

  5. Next.js如何引入百度分享(外部引用)类似的外部js,以及如何操作window

    前言 近期使用React官方推荐的服务端渲染工具Next.js进行服务端页面编程时遇到引入百度分享等外部JS文件的问题. Next.js可以使用内置组件来装在 <head> 到页面中 im ...

  6. JS字符串 window.open() window.opener window.name window对象总结

    晚上总结了一下,发上来分享: 字符串 window.open()  window.opener  window.name  window对象等的一点总结  http://download1.csdn. ...

  7. Js中的window.parent ,window.top,window.self 详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  8. js中Window跟window的区别

    昨天一个朋友问我Window跟window的区别: window.name=1;console.log(Window.name);//Windowconsole.log(window.name);// ...

  9. JS的window.parent ,window.top,window.self

    1.简述 在应用有frameset或者iframe的页面时, parent是父窗口, top是最顶级父窗口, self是当前窗口, 2.window.self 功能:是对当前窗口自身的引用.它和win ...

最新文章

  1. R构建径向核支持向量机分类器实战代码(Radial kernel Support Vector Classifier)
  2. 一些少见的下载地址(按需求更新)
  3. 实战struts2——用户登录
  4. Tableau10.0学习随记-分组问题
  5. mybatis报错,找不到对应mapper文件
  6. InfluxDB(官方使用说明)
  7. 隐瞒英特尔重大安全漏洞惹众怒,苹果遭遇集体诉讼
  8. php cgi fastcgi php-fpm区别
  9. 【线性代数(12)】线性方程组、方程组解的结构
  10. ZZNU-OJ-2118 -(台球桌面碰来碰去,求总距离)——模拟到爆炸【超时】的不能AC的代码...
  11. Latex设置每段前的空格数
  12. 超详细如何配置NAT
  13. fabric多节点网络环境搭建(v2.2)
  14. Vue 点击文字改变文字颜色
  15. Tomcat配置图片保存路径
  16. 如何快速转行做产品经理
  17. Java入门第三季-综合实战:简易扑克牌游戏
  18. Css选择器(上) 让样式无孔不入
  19. Simple Wallpaper Changer
  20. 0909中兴面试准备

热门文章

  1. volley imagerequest
  2. Delphi 的运算符重载(1)
  3. cocos2d-js 3.0 jsb环境调用底层java代码
  4. centos6.3安装zabbix2.0.2记录
  5. JavaScript:动态选中CheckBox
  6. Boke宝贝 - 免费提供图片存储空间、计数器、留言板
  7. Android windowSoftInputMode属性解析
  8. 【Android】UI架构
  9. Eclipse Outline图标
  10. 读书笔记1 : program paradigm