Javascript,值类型作为参考

时间:2012-06-25 12:12:54

标签: javascript

在某些情况下,我需要将值类型作为引用传递而不更改处理函数。

  1. 示例数字类型(var limit)

    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();
    }
    
  3. 是否有解决方案

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

var limit = {
    value: 0 
};