2012-06-25 75 views
0

我有一些場景,我需要傳遞值類型作爲參考而不改變處理函數。Javascript,值類型作爲參考

  1. 例數值類型(VAR極限)

    var limit = 0; // Need to be the reference type 
    var multiCallback = new MultiCallback(limit, function(){}); 
    for (element in myObject) 
    { 
        limit++; 
        element.DoSomething(multiCallback.callback); 
    } 
    
    function MultiCallback(limit, func) 
    { 
        var calls = 0; 
    
        function callback() 
        { 
         if (++calls == limit) 
         { 
          func(); 
         } 
        } 
    
        return { 
         callback : callback 
        } 
    } 
    
  2. Examble功能類型

    var resizeCallback = function(){}; 
    $(window).resize(resizeCallback); 
    
    function showPage() 
    { 
        resizeCallback = resizePage(); 
    } 
    
    function showLoader() 
    { 
        resizeCallback = resizeLoader(); 
    } 
    

是有一個解決方案

+1

你不能(*不改變的處理功能* ...)。 JavaScript中的數字和字符串是不可變的。 – Matt

+0

[在Javascript中通過引用傳遞變量]的可能重複(http://stackoverflow.com/questions/7744611/pass-variables-by-reference-in-javascript) –

回答

1

更改可變意志的值從不更新前變量的價值。

對於函數,你可以這樣做:

var current = function() { ... }; 
function resizeCallback() { 
    return current.apply(this, arguments); 
} 
// Updating current will work: 
current = function() { ... something ... }; 

對於其他值(原語和對象),最接近的是要傳遞一個對象:

var limit = {value: 0}; 
function MultiCallback(limit, func) { 
    .... 
    if (limit.value == ++calls) ... 
} 
// Changing limit: 
limit.value = 1; 
1

沒有通在javascript中引用(分配參數對調用者不可見)。你在函數示例中做的是修改一個全局變量。

您可以用對象和對象的突變包裝它是可見的來電:

var limit = { 
    value: 0 
};