本文解析JavaScript自执行函数(IIFE)中传入window、jQuery和undefined参数的核心原因。通过将这些全局变量作为局部参数,可以缩短作用域链查找路径,提升访问速度;同时避免全局命名空间污染,确保在压缩代码时变量名被优化,并保证undefined值的准确性。
自执行函数参数传入原理
function (window, $, undefined) {
play=function(){
$("#demo").val("This is a demo.");
}
window.wbLogin = play;
})(window, jQuery);
为何在自执行函数中需要将window和jQuery对象作为参数传入?
传入jQuery的作用
为何要专门传入jQuery?
通过定义一个匿名函数,可以创建一个“私有”命名空间。该空间内的变量和方法不会污染全局命名空间。这一特性至关重要,也是JavaScript框架必须具备的功能。由于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中,undefined是一个可以被重新赋值的全局变量,若被重写则会导致判断错误。
简而言之,这样做是将全局变量以参数形式转换为自执行函数内部的局部变量。
至于这样做的目的,是为了提高程序效率。其原理涉及JavaScript的作用域机制,即所谓的scope chain(作用域链)。如果在当前作用域中找不到该属性(局部变量),解释器会向上一层作用域查找,直至最顶层,即window对象。这意味着全局变量和下级作用域都是window的一个属性,向下依次类推。
此外,传入jQuery并将参数写为$,可以确保在此函数内部$指向jQuery,而非其他可能使用$符号的库。
同理,由于未传入第三个参数,该参数自然为undefined。鉴于JavaScript中undefined是一个变量且可能被修改,通过参数传入可以确保判断undefined时的准确性。有时在判断中使用typeof xxx === 'undefined'也是基于这一原因。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持本站!