簡體   English   中英

將Javascript局部變量設置為全局以進行遞歸循環

[英]Make Javascript local variable to global for recursive loops

我有一個遞歸函數,它有一個局部變量。 它在特定條件下自稱。 需要更新局部變量,但每次調用它都會創建一個特定於當前函數范圍的新局部變量。 如何訪問本地變量以訪問所有遞歸循環而不創建新循環? 像__Callee.varname這樣的東西?

代碼是:

var addAttribute = function(object,elem)
{
    var attributes = [];

    // only attribute without values
    if ( object instanceof Array )
    {
        for ( var value in object )
        {
            attributes.push(object[value]);
        }
    }
    // attribute with values
    else if ( object instanceof Object )
    {
        for ( var key in object )
        {
            if ( object[key] instanceof Array )
            {
                addAttribute(object[key],elem);
            }
            else
            {
                attributes.push(key+'=\''+object[key]+'\'');
            }
        }
    }
    // Only one attribute
    else if ( typeof object === 'string' )
    {
        attributes.push('\''+object+'\'');
    }
    // Invalid parameter
    else
    {
        console.log('Invalid parameter: '+typeof object);
    }

    console.log('<'+elem+' '+attributes.join(' ').toString()+' />');

}

由於在其他函數和全局范圍中使用此名稱,我不想將變量設置為全局變量。

使用封閉物

function fn() {
    function recursiveFunction() {
        // do something with x
        recursiveFunction();
    }
    var x = 0;
    recursiveFunction();
}

通常的做法是將它傳遞給函數,可能可選:

var addAttribute = function(object,elem, attributes) {
    attributes = attributes || [];
    // ....

然后在遞歸調用它時,傳入第三個參數:

addAttribute(object[key], value, attributes);

這是一個簡化的例子,展示了:

 function foo(num, array) { array = array || []; array.push(num); console.log("Pushed " + num + ", array = " + JSON.stringify(array)); if (num < 5) { foo(num + 1, array); } } foo(1); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM