當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS-[IIFE闭包]
生活随笔
收集整理的這篇文章主要介紹了
JS-[IIFE闭包]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
JS-IIFE&閉包
- IIFE(立即調用函數表達式)
- 示例
- IIFE實現單例模式
- 閉包
- 計數器例子
- 非閉包實現
- 閉包實現
- IIFE閉包實現
- 內存泄露解決
- 計數器例子
?
IIFE(立即調用函數表達式)
示例
(function iife(){ //直接執行,無需調用console.log("hello"); })(); //上面相當于function iife(){console.log("hello"); } iife();注意:為了規范,IIFE的函數名雖無意義,但最好加上
IIFE實現單例模式
var sun=(function(){console.log("sun create..."); //在聲明還未調用時就被直接執行var name="sun";var size=1599;function say(){console.log(name+" "+size);}return{ //返回可供調用的方法或參數say:say,name:name //返回的name只是一個形參} })(); sun.say();IIFE的作用:隔離作用域,防止污染全局命名空間
閉包
計數器例子
非閉包實現
var count=0; function add(){count++;console.log(count); } add(); add(); //輸出2上面的計數器缺點是count是全局的,不具有安全性,易被誤操作。用閉包就可以解決這個問題
閉包實現
function counter(){var count=0; //函數內部定義,不影響全局function add(){count++;console.log(count);}return{add:add}; } var counter1=new counter(); counter1.add(); counter1.add(); //輸出2IIFE閉包實現
(function counter(){var count=0;function add(){count++;console.log(count);}window.counter={ //直接把計時器賦給window作為屬性add:add}; })(); //直接調用,不需要new counter.add(); counter.add(); //輸出2內存泄露解決
當不需要使用閉包時,閉包仍在占用內存,可能會造成 內存泄露
因此,不使用時可以通過:
counter=null;此時counter就被釋放了
轉載于:https://www.cnblogs.com/yangjiale/p/11261372.html
總結
以上是生活随笔為你收集整理的JS-[IIFE闭包]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 门面模式(Facade)
- 下一篇: dynamic和匿名对象