Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命名空间Javascript中的递归函数_Javascript - Fatal编程技术网

命名空间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