0

処理関数を変更せずに値型を参照として渡す必要があるシナリオがいくつかあります。

  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. Examble関数型

    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 に答える