javascript自执行函数
前端之家收集整理的这篇文章主要介绍了
javascript自执行函数,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<div class="jb51code">
<pre class="brush:js;">
function (window,$,undefined) {
play=function(){
$("#demo").val("This is a demo.");
}
window.wbLogin = play;
})(window,jQuery);
@H_
403_2@像上边这样的
代码为什么要把window,jQuery对象传进去?
@H_
403_2@
为什么要传入 jQuery?
@H_
403_2@通过定义一个匿名
函数,创建了一个“私有”的命名空间,该命名空间的变量和
方法,不会破坏全局的命名空间。这点非常有用也是一个 JS 框架必须
支持的
功能,jQuery 被应用在成千上万的 JavaScript 程序中,必须确保 jQuery 创建的变量不能和导入他的程序所使用的变量发生冲突。
@H_
403_2@
为什么要传入 window?
@H_
403_2@通过传入 window 变量,使得 window 由
全局变量变为局部变量,当在 jQuery
代码块中访问 window 时,不需要将作用域链回退到顶层作用域,这样可以更快的访问 window;这还不是关键所在,更重要的是,将 window 作为参数传入,可以在压缩
代码时进行优化,看看 jquery-1.6.1.min.js:
@H_
403_2@
(function(a,b){})(window); // window 被优化为 a
@H_
403_2@
为什么要传入 undefined?
@H_
403_2@在自
调用匿名
函数的作用域内,确保 undefined 是真的未定义。因为 undefined 能够被重写,赋予新的值。
@H_
403_2@一句话,使
全局变量以参数形式变成自执行
函数内部的局部变量。
@H_
403_2@至于为什么这么做,提高程序效率。为什么能提高效率,得从javascript的机制说起,所谓的scope chain作用域链,在当前作用域中如果没有该
属性(局部变量)则向上一层作用域中寻找,一直到最上层,也就是window。也就是说
全局变量和下级作用域都是window的一个
属性,向下依此类推。
@H_
403_2@另外jQuery传入后将参数写成$可以保证在此
函数内$为jquery而不是其他类似使用$符号的库。
@H_
403_2@undefined同理,由于没有传入第三个参数,自然就是undefined。由于javascript中undefined是一个变量,可以被改变,所以这样可以保证undefined判断时的准确性。有时判断时使用typeof xxx === 'undefined'也是因为这个原因。
@H_
403_2@以上就是本文的全部
内容,希望本文的
内容对大家的学习或者工作能带来一定的帮助,同时也希望多多
支持编程之家!