27
2020
07

将 JavaScript 代码包含在一个函数块中有神马意思呢?为什么要这么做?

换句话说,为什么要用立即执行函数表达式(Immediately-Invoked Function Expression)。


IIFE 有两个比较经典的使用场景,一是类似于在循环中定时输出数据项,二是类似于 JQuery/Node 的插件和模块开发。


for(var i = 0; i < 5; i++) {

    setTimeout(function() {

        console.log(i);  

    }, 1000);

}

上面的输出并不是你以为的0,1,2,3,4,而输出的全部是5,这时 IIFE 就能有用了:



for(var i = 0; i < 5; i++) {

    (function(i) {

      setTimeout(function() {

        console.log(i);  

      }, 1000);

    })(i)

}


而在 JQuery/Node 的插件和模块开发中,为避免变量污染,也是一个大大的 IIFE:


(function($) { 

        //代码

 } )(jQuery);

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。