[英]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.