Javascript,值类型作为参考

Javascript, value types as reference

本文关键字:参考 类型 Javascript      更新时间:2023-09-26

我有一些需要传递值类型作为引用而不更改处理函数的情况。

  1. 示例数值类型(变量限制)

    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();
    }
    

有没有解决方案

更改变量的值永远不会更新变量的先前值。

对于函数,您可以执行以下操作:

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;

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

你可以用一个对象包装它,并且该对象的突变对调用方可见:

var limit = {
    value: 0 
};