分享

说一说JS的IIFE

 shawnesc 2018-06-05

1 定义

  1. function foo(){  
  2.   var a = 10;  
  3.   console.log(a);  
  4. }  
  5.    
  6. foo();  
  1. (functionfoo(){  
  2.   vara=10;  
  3.   console.log(a);  
  4. })();  

2 为什么需要IIFE?

3 IIFE的常见形式

列表 1:IIFE写法一
  1. (function foo(){  
  2.   var a = 10;  
  3.   console.log(a);  
  4. })();  

列表 2:IIFE写法二
  1. (functionfoo(){  
  2.   vara=10;  
  3.   console.log(a);  
  4. }());  

其实,IIFE不限于()的表现形式[1],但是还是遵守约定俗成的习惯比较好。

4 IIFE的函数名和参数

根据《You Don’t Know JS:Scope & Clouses》[2]的说法,尽量避免使用匿名函数。但是IIFE确实只执行一次,给IIFE起个名字有些画蛇添足了。如果非要给IIFE起个名字,干脆就叫IIFE好了。
  1. var a = 2;  
  2. (function IIFE(global){  
  3.     var a = 3;  
  4.     console.log(a); // 3  
  5.     console.log(global.a); // 2  
  6. })(window);  
  7.    
  8. console.log(a); // 2  

5 IIFE构造单例模式

  1. functionmyModule(){  
  2.   varsomeThing="123";  
  3.   varotherThing=[1,2,3];  
  4.    
  5.   functiondoSomeThing(){  
  6.     console.log(someThing);  
  7.   }  
  8.    
  9.   functiondoOtherThing(){  
  10.     console.log(otherThing);  
  11.   }  
  12.    
  13.   return{  
  14.     doSomeThing:doSomeThing,  
  15.     doOtherThing:doOtherThing  
  16.   }  
  17. }  
  18.    
  19. varfoo=myModule();  
  20. foo.doSomeThing();  
  21. foo.doOtherThing();  
  22.    
  23. varfoo1=myModule();  
  24. foo1.doSomeThing();  
  1. var myModule=(functionmodule(){  
  2.   varsomeThing="123";  
  3.   varotherThing=[1,2,3];  
  4.    
  5.   functiondoSomeThing(){  
  6.     console.log(someThing);  
  7.   }  
  8.    
  9.   functiondoOtherThing(){  
  10.     console.log(otherThing);  
  11.   }  
  12.    
  13.   return{  
  14.     doSomeThing:doSomeThing,  
  15.     doOtherThing:doOtherThing  
  16.   }  
  17. })();  
  18.    
  19. myModule.doSomeThing();  
  20. myModule.doOtherThing();  

6 小结

引用

1Ben Alman, “Immediately-Invoked Function Expression (IIFE)“.
2Kyle Simpson, You Don’t Know JS:Scope & Clouses (, 2014).

原文地址:http://softlab./blog/subaochen/2016/02/%E8%AF%B4%E4%B8%80%E8%AF%B4js%E7%9A%84iife/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多