为什么返回是不确定的,而console.log返回一个int?

布伦

所以我有以下功能:

var multiplyT = function(a, b, acc) {

    if (b == 0) {
        console.log("BASE CASE: ", acc);

        return acc;
    } else {
        b--;
        acc = acc + a;
        console.log("NOT THE BASE CASE: ", a,b,acc);
        multiplyT(a, b, acc);
    }

}

它被称为:

console.log(multiplyT(5,3,0));

并给出:

NOT THE BASE CASE:  5 2 5
NOT THE BASE CASE:  5 1 10
NOT THE BASE CASE:  5 0 15
BASE CASE:  15
undefined

作为输出。我感到困惑的是,为什么acc会为console.log提供正确的值,但根据返回的内容却是“未定义的”。

肖恩·奥尔森

这个不错。递归会使您的头旋转。它之所以未定义,是因为并非所有迭代都返回一个值,而对于那些没有返回的值,您将得到未定义的-就像将变量设置为不返回值的任何函数一样。

但是,它与递归混淆,因为在这种情况下,您看到的返回值来自首次调用和最后完成的迭代。与常规方法调用不同,在常规方法调用中return中断了该方法的执行-将其从返回的任何位置发送回去,递归仍然绕着调用栈返回,返回了它必须返回的所有值,包括未定义的值他们被称为的顺序。因此,它实际上为您的console.log调用提供了四个返回值:15,未定义,未定义,未定义。

因为它是同步的,所以console.log在调用它的方法完成之前无法执行。它输出的是它获得的最后一个值,或者未定义。如果在else块中的方法调用之后坚持返回,则将得到5,即函数第一次迭代后的acc值。

var multiplyT = function(a, b, acc) {

  if (b == 0) {
    console.log("BASE CASE: ", acc);

    return acc;
  } else {
    b--;
    acc = acc + a;
    console.log("NOT THE BASE CASE: ", a,b,acc);
    multiplyT(a, b, acc);
    return acc;
  }
}
console.log(multiplyT(5,3,0));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么从promise返回的字符串是不确定的?

来自分类Dev

JS:不确定为什么函数返回

来自分类Dev

为什么我的去抖动功能返回不确定的值?

来自分类Dev

不确定为什么我的函数不断返回错误?

来自分类Dev

返回一个 console.log()!

来自分类Dev

为什么console.log()显示一个数组,但是typeof返回'object'?

来自分类Dev

为什么直接修改__dict__会返回不确定的结果?

来自分类Dev

我的代码不断返回“ none”作为值,我不确定为什么

来自分类Dev

为什么返回值不确定?以及如何解决?

来自分类Dev

Android:不确定为什么我的方法不返回ArrayList <HashMap <String,String >>

来自分类Dev

为什么getpagesize()返回一个int?

来自分类Dev

为什么Dapper的.Execute(...)返回一个int?

来自分类Dev

为什么Inpustream读取方法返回一个int?

来自分类Dev

为什么string :: compare返回一个int?

来自分类Dev

收到错误消息:警告C4715 ::并非所有控制路径都返回一个值,但不确定为什么

来自分类Dev

返回一个int数组

来自分类Dev

当服务器返回 HttpStatus 200 OK 时,不确定为什么我的 javascript FETCH 调用失败

来自分类Dev

我从括号之间提取信息的VBA代码返回类型不匹配,但是我不确定为什么。

来自分类Dev

为什么这会给我一个不确定的错误?

来自分类Dev

如何返回不确定的类型?

来自分类Java

为什么InputStream#read()返回一个int而不是一个字节?

来自分类Dev

为什么我的异步函数返回一个 Future<int> 在等待每个时停顿?

来自分类Dev

CStringArray :: GetAt(int index)返回一个常量。为什么?

来自分类Dev

为什么在Python 3中索引字节返回一个int而不是字节?

来自分类Dev

为什么InputStream read()返回一个int而不是short?

来自分类Dev

为什么没有round()类型的函数返回一个int?

来自分类Dev

为什么我的函数返回一个Unit而不是Int?

来自分类Dev

为什么返回 console.log() 会返回 undefined?

来自分类Dev

简单的 forEach 返回未定义,我移动了一个 console.log 并且它可以工作 - 为什么?

Related 相关文章

  1. 1

    为什么从promise返回的字符串是不确定的?

  2. 2

    JS:不确定为什么函数返回

  3. 3

    为什么我的去抖动功能返回不确定的值?

  4. 4

    不确定为什么我的函数不断返回错误?

  5. 5

    返回一个 console.log()!

  6. 6

    为什么console.log()显示一个数组,但是typeof返回'object'?

  7. 7

    为什么直接修改__dict__会返回不确定的结果?

  8. 8

    我的代码不断返回“ none”作为值,我不确定为什么

  9. 9

    为什么返回值不确定?以及如何解决?

  10. 10

    Android:不确定为什么我的方法不返回ArrayList <HashMap <String,String >>

  11. 11

    为什么getpagesize()返回一个int?

  12. 12

    为什么Dapper的.Execute(...)返回一个int?

  13. 13

    为什么Inpustream读取方法返回一个int?

  14. 14

    为什么string :: compare返回一个int?

  15. 15

    收到错误消息:警告C4715 ::并非所有控制路径都返回一个值,但不确定为什么

  16. 16

    返回一个int数组

  17. 17

    当服务器返回 HttpStatus 200 OK 时,不确定为什么我的 javascript FETCH 调用失败

  18. 18

    我从括号之间提取信息的VBA代码返回类型不匹配,但是我不确定为什么。

  19. 19

    为什么这会给我一个不确定的错误?

  20. 20

    如何返回不确定的类型?

  21. 21

    为什么InputStream#read()返回一个int而不是一个字节?

  22. 22

    为什么我的异步函数返回一个 Future<int> 在等待每个时停顿?

  23. 23

    CStringArray :: GetAt(int index)返回一个常量。为什么?

  24. 24

    为什么在Python 3中索引字节返回一个int而不是字节?

  25. 25

    为什么InputStream read()返回一个int而不是short?

  26. 26

    为什么没有round()类型的函数返回一个int?

  27. 27

    为什么我的函数返回一个Unit而不是Int?

  28. 28

    为什么返回 console.log() 会返回 undefined?

  29. 29

    简单的 forEach 返回未定义,我移动了一个 console.log 并且它可以工作 - 为什么?

热门标签

归档