我有一个递归函数,它有一个局部变量。 它在特定条件下自称。 需要更新局部变量,但每次调用它都会创建一个特定于当前函数范围的新局部变量。 如何访问本地变量以访问所有递归循环而不创建新循环? 像__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()+' />');
}
由于在其他函数和全局范围中使用此名称,我不想将变量设置为全局变量。
答案 0 :(得分:1)
通常的做法是将其传递给函数,可能选择:
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);
答案 1 :(得分:1)
使用闭包
function fn() {
function recursiveFunction() {
// do something with x
recursiveFunction();
}
var x = 0;
recursiveFunction();
}