由於公司最近接單有點忙,所以就沒來得及更新,很多公司找上門來談【南寧小程序開發 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一樣的煩惱