命名空间Javascript中的递归函数
我有一个网站,为了便于组织,我已经命名了它的名称空间(命名空间Javascript中的递归函数,javascript,Javascript,我有一个网站,为了便于组织,我已经命名了它的名称空间(NS.something.function(),等等)。我希望在这个名称空间的Javascript中有一个递归函数,但是当函数试图调用自己时,我得到一个未定义的不是一个函数错误 var timeoutInt=2000; var NS={}; var resultsElement=document.getElementById('results'); NS.recur1=(函数(){ setTimeout(函数(){ NS.recur1();
NS.something.function()
,等等)。我希望在这个名称空间的Javascript中有一个递归函数,但是当函数试图调用自己时,我得到一个未定义的不是一个函数
错误
var timeoutInt=2000;
var NS={};
var resultsElement=document.getElementById('results');
NS.recur1=(函数(){
setTimeout(函数(){
NS.recur1();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
})();
(函数recur2(){
setTimeout(函数(){
recur2();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
})();
NS.recur3=(函数(){
(函数realRecur3(){
setTimeout(函数(){
realRecur3();
resultElement.innerHTML+='recur3重新出现!
';
},timeoutit);
})()
})();
recur1()
是我遇到问题的函数recur2()
是我以前在JS中看到的递归工作方式recur3()
是我一直在玩弄的一个想法(不理想,但肯定是一个解决方案)
有什么方法可以使递归函数recur1()
工作吗?(函数recur1()){
setTimeout(函数(){
recur1();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
})();
我会的
您可以命名函数表达式,当您命名时,名称将绑定到函数体中函数表达式的结果
解释
生产
FunctionExpression:函数
标识符(FormalParameterListopt){FunctionBody}
评估结果如下:
调用envRec的CreateImmutableBinding(N)具体方法,传递标识符的字符串值作为参数
(函数recur1(){
setTimeout(函数(){
recur1();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
})();
我会的
您可以命名函数表达式,当您命名时,名称将绑定到函数体中函数表达式的结果
解释
生产
FunctionExpression:函数
标识符(FormalParameterListopt){FunctionBody}
评估结果如下:
调用envRec的CreateImmutableBinding(N)具体方法,传递标识符的字符串值作为参数
首先,recur1不是一个函数,它是一个闭包,函数和闭包(包含一些内部逻辑的函数)是不同的东西,你把它们都搞乱了 我认为您想要的是声明函数,然后调用其中一个函数,触发一个循环递归,由一个名为timeoutit的标志计时,因此您可以创建一些代码流,用timeoutit毫秒更新某些内容
var timeoutInt = 2000;
var NS = {};
var resultsElement = document.getElementById('results');
NS.recur1 = function(){
setTimeout(function(){
NS.recur1();
resultsElement.innerHTML += 'recur1 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur2 = function(){
setTimeout(function(){
NS.recur2();
resultsElement.innerHTML += 'recur2 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur3 = function(){
setTimeout(function(){
NS.recur3();
resultsElement.innerHTML += 'recur3 re-occuring!<br/>';
}, timeoutInt);
};
var timeoutInt=2000;
var NS={};
var resultsElement=document.getElementById('results');
NS.recur1=函数(){
setTimeout(函数(){
NS.recur1();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
};
NS.recur2=函数(){
setTimeout(函数(){
NS.recur2();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
};
NS.recur3=函数(){
setTimeout(函数(){
NS.recur3();
resultElement.innerHTML+='recur3重新出现!
';
},timeoutit);
};
使用上面的代码,从这一点开始
下面是一个进一步的帮助:(工作示例)首先,recur1不是一个函数,它是一个闭包,函数和闭包(封装一些内部逻辑的函数)是不同的东西,你把它们都搞乱了 我认为您想要的是声明函数,然后调用其中一个函数,触发一个循环递归,由一个名为timeoutit的标志计时,因此您可以创建一些代码流,用timeoutit毫秒更新某些内容
var timeoutInt = 2000;
var NS = {};
var resultsElement = document.getElementById('results');
NS.recur1 = function(){
setTimeout(function(){
NS.recur1();
resultsElement.innerHTML += 'recur1 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur2 = function(){
setTimeout(function(){
NS.recur2();
resultsElement.innerHTML += 'recur2 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur3 = function(){
setTimeout(function(){
NS.recur3();
resultsElement.innerHTML += 'recur3 re-occuring!<br/>';
}, timeoutInt);
};
var timeoutInt=2000;
var NS={};
var resultsElement=document.getElementById('results');
NS.recur1=函数(){
setTimeout(函数(){
NS.recur1();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
};
NS.recur2=函数(){
setTimeout(函数(){
NS.recur2();
resultElement.innerHTML+=“重复发生!
”;
},timeoutit);
};
NS.recur3=函数(){
setTimeout(函数(){
NS.recur3();
resultElement.innerHTML+='recur3重新出现!
';
},timeoutit);
};
使用上面的代码,从这一点开始
下面是进一步帮助您的一个例子:(工作示例)Mike,真的吗?!那对那个家伙没有帮助!而且似乎是非常糟糕的代码,甚至比他已经拥有的代码还要糟糕……此外,你recur1 name for anonymous function name取消了他试图设置的名称空间的概念,因为recur1被调用的不再是NS.recur1,而是只有在闭包中才可见的recur1。。。非常黑暗的代码@JaõaPinho,你说的“暗码”是指“暗码”吗?我问这个问题是因为我以前没听说过被称为黑暗的代码!我记得在某个地方看到,这种技术在>IE9中不起作用。可能是一个自动执行命名函数的变量声明。。。有人知道吗?迈克,真的?!那对那个家伙没有帮助!而且似乎是非常糟糕的代码,甚至比他已经拥有的代码还要糟糕……此外,你recur1 name for anonymous function name取消了他试图设置的名称空间的概念,因为recur1被调用的不再是NS.recur1,而是只有在闭包中才可见的recur1。。。非常黑暗的代码@JaõaPinho,你说的“暗码”是指“暗码”吗?我要求你
var timeoutInt = 2000;
var NS = {};
var resultsElement = document.getElementById('results');
NS.recur1 = function(){
setTimeout(function(){
NS.recur1();
resultsElement.innerHTML += 'recur1 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur2 = function(){
setTimeout(function(){
NS.recur2();
resultsElement.innerHTML += 'recur2 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur3 = function(){
setTimeout(function(){
NS.recur3();
resultsElement.innerHTML += 'recur3 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur1 = (function(){
setTimeout(function(){
NS.recur1();
resultsElement.innerHTML += 'recur1 re-occuring!<br/>';
}, timeoutInt);
})(); // << This () invokes the function you just wrapped
NS.recur1 = function(){
setTimeout(function(){
NS.recur1();
resultsElement.innerHTML += 'recur1 re-occuring!<br/>';
}, timeoutInt);
};
NS.recur1(); // begin recursion