对比一下两段代码先
下面这段代码其实调用的时候到第二次递归调用的时候返回的值依然是有的,在cons中打印出来是8wg28Qtxms
但是在外部一旦调用返回值就是undefined
下面来看第二段代码 后面做解释
var s = 1
function test(){
var flag = false
var filterArray = ['script', 'javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml']
var randomStr = "8wg28Qtxml"
console.log(s)
if(s == 2){
randomStr = "8wg28Qtxms"
}
console.log(randomStr)
for (var i = 0; i < filterArray.length; i++) {
if (randomStr.indexOf(filterArray[i]) < 0) {
flag = false
} else {
flag = true
break;
}
}
if (flag == true) {
s++
test()
} else {
console.log(randomStr)
return randomStr
}
}
第二段代码
var s = 1
function test(){
var flag = false
var filterArray = ['script', 'javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml']
var randomStr = "8wg28Qtxml"
console.log(s)
if(s == 2){
randomStr = "8wg28Qtxms"
}
console.log(randomStr)
for (var i = 0; i < filterArray.length; i++) {
if (randomStr.indexOf(filterArray[i]) < 0) {
flag = false
} else {
flag = true
break;
}
}
if (flag == true) {
s++
return test()
} else {
console.log(randomStr)
return randomStr
}
}
第二段代码返回值是正常的 原因是为什么呢?
因为没次调用的时候值只是返回到了递归的test()函数中 而并没有返回到外部的调用中 所以我们需要没次递归调用的时候 return test() 把没次最新的值返回到外部调用的函数中去 就可以解决这个问题