这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文主要介绍了 javascript 自执行函数的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
- 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 能够被重写,赋予新的值。
一句话,使全局变量以参数形式变成自执行函数内部的局部变量。
至于为什么这么做,提高程序效率。为什么能提高效率,得从 javascript 的机制说起,所谓的 scope chain 作用域链,在当前作用域中如果没有该属性(局部变量)则向上一层作用域中寻找,一直到最上层,也就是 window。也就是说全局变量和下级作用域都是 window 的一个属性,向下依此类推。
另外 jQuery 传入后将参数写成 $ 可以保证在此函数内 $ 为 jquery 而不是其他类似使用 $ 符号的库。
undefined 同理,由于没有传入第三个参数,自然就是 undefined。由于 javascript 中 undefined 是一个变量,可以被改变,所以这样可以保证 undefined 判断时的准确性。有时判断时使用 typeof xxx === 'undefined'也是因为这个原因。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持 phperz!
来源: http://www.phperz.com/article/17/0605/327843.html