javascript函数奇怪行为(函数调用)

j91ykkif  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(392)
function parent() {
  console.log("parent");

  function child() {
    console.log("child1")
  }
  return child();

  function child() {
    console.log("child 2")
  }
}
parent();

输出为:parent和child2
为什么不是child1,而是child2被打印出来了?

iswrvxsc

iswrvxsc1#

第二 child() 覆盖第一个。因此 child 2 在控制台中打印。
如果您添加另一个(第三个) child 方法,则该方法将运行。

function parent() {
  console.log("parent");

  function child() {
    console.log("child1")
  }
  return child();

  function child() {
    console.log("child 2")
  }

  function child() {
    console.log("child 3")
  }
}
parent();
fkaflof6

fkaflof62#

在js中,如果您编写的函数与前面的函数同名。js将重新定义函数,在之后使用函数。这是覆盖

ego6inou

ego6inou3#

function declarations 在实际开始执行代码之前,将被提升(移到顶部)。
所以想象一下,在执行到达return语句之前,child1和child2函数都位于顶部。比如:

function parent() {

*****function child() {

    console.log("child1")
  }******

*****function child() {

    console.log("child 2")
  }******

*********

  console.log("parent");

  return child();

}

parent();

而且,这里的child2函数覆盖了child1函数,所以返回child2。

相关问题