2016-05-15 57 views
1

很多人說each()裏面的循環函數是不好做法。Javascript替換局部變量帶函數返回

就會造成可怕的性能比較 ...

就像一個版本...

版本之一:

$(".next").each(function() { 

    var el = $(this), 
     setNo = 0, 
     onNo = function() { 

      setNo = 1; 

     }; 

    onNo(); // setNo will become 1 

)}; 

所以,我必須移動功能each()。然後我很困惑於在each()

版本二取代局部變量:

var onNo = function() { 

    var setNo = 1; 

    return setNo; // replace it 

}; 

$(".next").each(function() { 

    var el = $(this), 
     setNo = 0; 

    onNo(); // it's not replacing setNo local variable. how to fix this? 

)}; 

如何解決這一問題?

你們是否有更高效的設計模式,我真的很困惑於javascript設計模式。

感謝...

+4

「可怕的表現」有點誇張:在99.9%的使用情況下,如果循環每次迭代的速度快或慢一百萬分之一秒,它絕對沒有區別。性能不應該是選擇模式的原因,除非a)代碼實際上對性能至關重要,並且b)您已經確認它實際上有任何實際區別。 – JJJ

+0

不確定兩個示例之間是否存在真正的差異(就性能而言)? (也想解釋一下)關於你嘗試使用/改變的變量,我想這可能有所幫助:http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript – sinisake

回答

3

你在找這樣的嗎?

function onNo ($el) { 
    // do some calculation with $el 
    var setNo = 1; 
    return setNo; 
} 

$(".next").each(function() { 

    var $el = $(this) 
    var setNo = 0 

    setNo = onNo($el) 
)} 
+0

這是聰明的解決方案,我從來沒有想過。哇!謝謝丹尼爾。你是最好的!! –

+1

@ChingChing Aww,謝謝!是時候將這個答案標記爲已接受,那麼? –

2

我Juhana的評論一致認爲,性能問題是不夠顯著擔心。但是,要回答您的問題:

您不能在另一個函數中設置局部變量。但是,您可以將變量傳遞給該函數。

var onNo = function(setNo) { 

    return setNo; // returns 0 

}; 

$(".next").each(function() { 

    var el = $(this), 
     setNo = 0; 

    onNo(setNo); 

)}; 
相關問題