javascript對全局變量值的修改(如記數器)

假設這樣一個場景:需要一個記數器來記錄類加數量。我們可以使用一個全局變量,通過一個專門的函數給它類加。但是這個變量是可以被所有window對象改變的。爲了使記數器不被其他代碼改變,假如我們使用function函數中的變量來當記數器,雖然不會被外面的代碼訪問到,但這個記數器只是個局部變量,它的生命週期是在函數調用開始到結束之間。

對全局變量,所有function函數都可以改變它的值,這可能帶來一些問題。我們將利用嵌套function函數來處理這個問題。這裏先說明一點,事實上function能訪問它的上一級作用域中的變量。
嵌套function函數例子:

<script>
document.getElementById("demo").innerHTML = add();
function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();    
    return counter; 
}
</script>

最後應用closures方式:closure(閉包是一個函數,能夠調用父範圍,甚至當父函數已經關閉。它使一個函數具有“私有”的變量)

<script>
var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
function myFunction(){
    document.getElementById("demo").innerHTML = add();
}
</script>

其中使用到自我調用函數,自我調用函數只執行一次,它在這裏將記數器設爲零,並返回function表達式.這等價於在function函數中定義了一個私有變量,並且又返回了一個匿名function()函數function () {return counter += 1; } ,因此每當我們調用add()時,都執行這個匿名function函數,並將每次記數器改變的值都存儲在add變量中。從而達到類加的目的。

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