为什么我的函数仅在传递“ 3”时才返回正确的值?

时间:2018-10-04 15:00:30

标签: javascript function

我需要在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}}

2 个答案:

答案 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/