我无法理解这种递归是如何起作用的。具体来说,我无法清楚地知道最后function foo(i) {
if (i < 0)
return;
console.log('begin: ' + i);
foo(i - 1);
console.log('end: ' + i);
}
foo(3);
(&#39;结束&#39; ---)是如何执行的。请提供指导。请帮我处理执行部分。我不明白它是如何形成输出的
npm login --registry=https://reg.example.com --scope=@myco
&#13;
答案 0 :(得分:4)
此函数执行方式的说明:
让我们找出调用此方法时发生的情况并将 var input [input1,input2,input3,input4];
for (i= 0; i < input.length; i++){
if (ltr.test(input[]) &&!(regex.test(input[]))){
myinputid.style.border='1.5px solid red';
} else { alert("noarray");
}
}
作为参数传递:
3
实际输出:
foo(3);
// (3<0) false, so skip the return
// Log out: 'begin: 3'
//foo (2);
// (2<0) skip return;
// Log out: 'begin: 2'
//foo(1);
// (1<0) skip return;
// Log out: 'begin: 1'
//foo(0);
// (0<0) false, skip return;
// Log out: 'begin: 0'
//foo(-1);
//(-1 < 0) true!!!
//return undefined
// Log out: 'end: 0'
//return undefined
//Log out: 'end: 1'
//return undefined
//Log out: 'end: 2'
//return undefined
//Log out: 'end: 3'
<---return undefined
答案 1 :(得分:2)
第一次迭代:foo(3)所以i = 3,然后调用foo(2),i = 2,然后i = 1,i = 0。现在调用foo(-1)。 if
条件现在为true,因此它在foo(0)调用中返回,其中console.log在i = 0时执行。然后i = 1,i = 2,i = 3。
所以你会:
begin 3
begin 2
begin 1
begin 0
end 0
end 1
end 2
end 3
答案 2 :(得分:1)
当您致电foo(3)
时,我们看到的是:
begin: 3
begin: 2
begin: 1
begin: 0
end: 0
end: 1
end: 2
end: 3
代码中发生了什么:
begin: 3
//foo is called, foo(2)
//start of foo(2)
begin: 2
//foo is called, foo(1)
//start of foo(1)
begin: 1
//foo is called, foo(0)
//start of foo(0)
begin: 0
//foo is called, foo(-1)
//start of foo(-1)
//if statement condition is true, returns, ending the recursion chain
//thread returns back to the foo(0) method, logs i
end: 0
//thread returns back to the foo(1) method, logs i
end: 1
//thread returns back to the foo(2) method, logs i
end: 2
//thread returns back to the foo(3) method, logs i
end: 3