挑戰百日學習計劃(南寧小程序開發)第20天(javascript 閉包)

由於公司最近接單有點忙,所以就沒來得及更新,很多公司找上門來談【南寧小程序開發 www.zkelm.com】 ,熬夜寫了三天的方案書,今晚纔有點空更新
在這裏插入圖片描述
閉包的作用,阻止變量污染,

1.不通過var 聲明的變量 屬於全局變量,即使他在函數內部,
2.在函數內部用 var 聲明的變量屬於函數的私有變量,外部無法訪問
3.函數可以訪問全局變量(函數以外的)

生命週期:全局變量 只有在網頁關閉纔會銷燬,而局部變量在函數運行完畢就會銷燬

我是這麼理解閉包的

var myfun=function(){
   var counter=1;
   return counter;   
}

你用瀏覽器console 輸入

在這裏插入圖片描述

其中 myfun 的值是一串 js的代碼

當年輸出 myfun() 則會允許這段代碼輸出結果
在這裏插入圖片描述
現在我們把代碼改成

var myfun=function(){
   var counter=0;
   return counter;
 }()

重點在這裏:myfun 會存儲在變量中,直到網頁關閉, 同時 myfun 裏面的 var counter 這個變量也會同時存在變量中不釋放

所以現在我們只需要構造一個 方法可以操作counter的值即可對counter的值進行修改,同時也保護了counter 可以在全局上進行訪問。

var myfun=function(){
   var counter=0;
   return function(){
      counter++
      return counter;
    }
}()

現在我們console 看一下 myfun 是什麼內容
在這裏插入圖片描述

由此可以看出, myfun 直接返回了一個爲執行的函數 ,而且 因爲

myfun 這個變量的存在內存中, 導致 counter 沒法銷燬, 所以 存在初始值 counter =0

現在我們運行一下 這個函數看看有什麼效果
輸入 myfun()
輸出結果:1
在運行一次 myfun()
輸出結果:2
在運行一次 myfun()
輸出結果:3

在這裏插入圖片描述

出現一個問題: counter++ 不能等於 counter+=1

counter++ 第一次運行的時候是0
counter+=1 第一次運行的時候是1

看來js的語法太混亂真是給開發人員如IE6一樣的煩惱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章