javascript - 令人困惑的 JavaScript 嵌套执行结果

标签 javascript nested-function

我尝试遵循简单的 JavaScript 嵌套代码,但结果令人困惑。

谁能详细解释一下吗?非常感谢。

我在等...

<script>
  // args = [];

  function foo (param) {
    args= [];
    if (param <= 1) {
      args.push(foo(2));
    } else {
      return param;
    }
  }

  foo(1)
</script>

最后的args[],我猜外面的args (是 [2])被嵌套的内部 args 覆盖(其中是[])。谁能详细解释一下结果?执行顺序如何?谢谢。

最佳答案

您的代码调用 foo 函数两次 1. foo(1) 是第一次调用,当 foo run 语句时

if (param <= 1) {
  args.push(foo(2)); // run here for the first call of foo 
} else {
  return param;
}

这类似于

if (param <= 1) {
  var foo2= foo(2); // -> trigger the second call of foo
  args.push(foo2); // first element is pushed in args
} else {
  return param;
}

在第二次调用 foo(2) param=2 时,上面代码中的 foo2=2 , 最后,你得到了一个只有一个项目和 args[0]=2

的数组

编辑:

args 不会被覆盖,您已将 args 声明为 foo 函数的局部变量,然后当调用 foo(1) 时,它会创建一个 args 变量。当调用 foo(2) 时,会创建另一个参数。

关于javascript - 令人困惑的 JavaScript 嵌套执行结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36266695/

相关文章:

javascript - 尽管使用++,但循环计数器增加 "exponentially"

python - 关闭本地值

Golang 返回函数

javascript - slider 未对齐并在复制到新主体时断开

javascript - 仅需要 3 个表单域中的 2 个

python - 从同名的内部函数访问全局函数

python - 嵌套函数不起作用,为什么?

javascript - jQuery 周期 2 : pause slideshow on click

javascript - 当单击同一元素时,jquery 删除背景闪烁

javascript - WebGL:如何将移动纹理叠加在另一个纹理之上?