2012-09-17 144 views
0

這裏是我的自動執行功能:如何用增量函數來避免全局變量?

var incrementInt = (function() { 
    var manyOut = 10; 

    if(incInt) { 
     incInt+=manyOut; 
    } else { 
     var incInt = 0; 
    } 

    return { 
     s: incInt, 
     m: manyOut 
    }; 
})(); 

我已經私有化變量incInt和manyOut,綁變量incrementInt返回的對象。

我的目標是創建一個函數,該函數返回一個對象,其中一個屬性是每次調用時都會遞增的整數。我希望遞增變量具有可能的最窄範圍。

我上面解決方案的問題是變量incInt在每次調用函數時都會重新初始化。由於其在函數內的範圍,變量會自動銷燬。

+0

每當什麼時候被稱爲? – zerkms

+0

哦!這是一個好點。它只被調用一次! – TaylorMac

回答

1

您需要使用方法來添加並獲取變量incInt

var incrementInt = (function() { 
    var manyOut = 10, 
     incInt = 0; 

    return { 
     add: function() { 
      return incInt += manyOut; 
     }, 
     getInt: function() { 
      return incInt; 
     } 
    }; 

})(); 


var a = incrementInt; 


a.add(); 
a.add(); 

a.getInt(); // 20​​​​​​ 
+0

非常好,其他解決方案看起來很有前途,但感謝你回答完整的問題返回一個對象,並注意到我想增量是一個變量 – TaylorMac

1

您可以創建和反對這樣

function incr() { 
    var i = 0; 

    this.inc = function() { 
    i++; 
    } 
} 

var incrInt = new incr(); 

// somewhere in you code 
incrInt.inc(); 
1
var f = function() { var c=0; return function() { return c++; }}() 
> f() 
0 
> f() 
1 
> f() 
2 

基本上,利用JavaScript的使用功能來創建範圍和關閉捕捉局部變量的能力。