http://segmentfault.com/q/1010000000311686

(function (window, $, undefined) {
play=function(){
$("#demo").val("This is a demo.");
} window.wbLogin = play;
})(window, jQuery);

像上边这样的代码为什么要把window, jQuery对象传进去.

为什么要传入 jQuery

通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个 JS 框架必须支持的功能,jQuery 被应用在成千上万的 JavaScript 程序中,必须确保 jQuery 创建的变量不能和导入他的程序所使用的变量发生冲突。

为什么要传入 window

通过传入 window 变量,使得 window 由全局变量变为局部变量,当在 jQuery 代码块中访问 window 时,不需要将作用域链回退到顶层作用域,这样可以更快的访问 window;这还不是关键所在,更重要的是,将 window 作为参数传入,可以在压缩代码时进行优化,看看 jquery-1.6.1.min.js:

(function(a,b){})(window); // window 被优化为 a

为什么要传入 undefined

自调用匿名函数的作用域内,确保 undefined 是真的未定义。因为 undefined 能够被重写,赋予新的值。

undefined = "now it's defined";
alert( undefined );

浏览器测试结果:

(感谢 @依云 的建议,添加浏览器版本号)

浏览器     测试结果            结论
ie8 now it's defined 可以改变
firefox22 undefined 不能改变
chrome31 undefined 不能改变
opera12 undefined 不能改变

一句话,使全局变量以参数形式变成自执行函数内部的局部变量。

至于为什么这么做,提高程序效率。为什么能提高效率,得从javascript的机制说起,所谓的scope chain作用域链,在当前作用域中如果没有该属性(局部变量)则向上一层作用域中寻找,一直到最上层,也就是window。也就是说全局变量和下级作用域都是window的一个属性,向下依此类推。

另外jQuery传入后将参数写成$可以保证在此函数内$为jquery而不是其他类似使用$符号的库。

undefined同理,由于没有传入第三个参数,自然就是undefined。由于javascript中undefined是一个变量,可以被改变,所以这样可以保证undefined判断时的准确性。有时判断时使用typeof xxx === 'undefined'也是因为这个原因

 

最新文章

  1. activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含义
  2. 【2016-11-13】【坚持学习】【Day25】【Oracle 查询某一字段最大值】
  3. 你一无所知的CSS
  4. MySQL乱码问题
  5. Unity(四)IocContainer 封装类库
  6. WPF数据绑定Binding(二)
  7. 应用OpenCV进行OCR字符识别
  8. linux下mysql的远程连接
  9. 依据道路的shape获得high_cross和low_cross
  10. Redis服务器启动之后3个警告信息的解决方案
  11. 如何将ubuntu控制台输出到串口?
  12. 宝塔面板配置阿里云SSL证书流程
  13. (转载)sqlmap用户手册详解
  14. [ZJOI2007]时态同步(dfs+贪心)
  15. var_export 掉咋天
  16. C#中查看当前Request是否使用代理的一种方法
  17. centos7 卸载rpm安装的包
  18. 【powerBI】power pivot添加参数表
  19. contentInsetAdjustmentBehavior各个值之间的区别
  20. MathType让矩阵中的小数以小数点对齐的教程

热门文章

  1. CentOS 6安装mock
  2. 【转】安装Django
  3. Android AIDL SERVICE 双向通信 详解
  4. Android Studio Check for Update
  5. 查一下 excel中某一列是否有重复
  6. Jsonp和java操作例子
  7. PHP写入Txt
  8. Garlands
  9. 数往知来SQL SERVER 视图 触发器 <九>
  10. 【24点游戏】cocos2dx 源码