我需要在document.getElementsByClassName
返回的对象数组中查找具有特定querySelector的元素的位置。
下面是我的函数的两个最小版本。这些和我的完整函数的问题在于,除非我使用要查找的确切位置调用函数,否则返回的值/表达式是“未定义的”。
对于下面的示例,该函数将运行您用作参数的任何数字weird(X),但仅当您运行weird(3)时才会触发我要返回的值/表达式。为什么会这样?
我知道该函数有效,因为如果我将console.log(w)放在“正”返回值之前,则会看到日志条目,但看不到我真正想要返回的内容。
weird = (w)=>{
if(w==3){
//console.log('I should now return '+w);
return 'It worked! W was '+w}else if(w>3){return 'Oops too large!'}else{
console.log('W is now '+w);
weird(++w)}
}
-或者-
weird = (w)=>{
for(;w==3;++w){if(w>3){return 'Oops, too large!'}
//console.log('I should now return '+w);
return 'Bam! It worked! W was '+w}}
答案 0 :(得分:1)
以递归方式调用函数时,您需要返回函数的结果,以便将值返回到最初调用该函数的位置。像这样:
weird = (w) => {
if (w == 3) {
console.log('I should now return '+w);
return 'It worked! W was '+w
} else if (w > 3) {
return 'Oops too large!';
} else {
console.log('W is now '+w);
return weird(++w)
}
}
现在函数将返回期望值。
答案 1 :(得分:0)
如果我正确理解了您的问题:
weird = (w)=>{
if(w==3){
//console.log('I should now return '+w);
return 'It worked! W was '+w
}
else if (w > 3){
return 'Oops too large!'
} else {
console.log('W is now '+w);
return weird(++w)}
}
var result = weird(1);
console.log('Result: ' + result);
...您想将递归调用返回到weird()
,这将允许嵌套调用weird()
返回并冒泡回到原始调用。
示例在这里摆弄:https://jsfiddle.net/r30otk85/