0

在某些情况下,我需要在不更改处理功能的情况下将值类型作为参考传递。

  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. 示例函数类型

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

有没有解决办法

4

2 回答 2

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;
于 2012-06-25T12:16:06.007 回答
1

javascript 中没有引用传递(调用者看不到分配参数)。您在函数示例中所做的是修改全局变量。

您可以用一个对象包装它,并且调用者可以看到该对象的突变:

var limit = {
    value: 0 
};
于 2012-06-25T12:18:06.973 回答