当日志后声明的内部函数具有相同的变量名称时,为什么内部函数中的变量返回nan

克劳德

这里发生了什么事?如果console.log在内部函数中声明一个变量,则会得到不同的结果

我知道var具有功能范围,内部函数可以从其父级访问变量

function outer() {
  var a = 2;

  function inner() {
    a++;
    console.log(a) //log NaN
    var a = 8
  }
  inner()
}
outer()

function outer() {
  var a = 2;

  function inner() {
    a++;
    console.log(a) //log 3
    var b = 8
  }
  inner()
}
outer()

NaN在第一个示例中返回日志3,在第二个示例中返回日志

ro

这是由于吊装

的声明a在内部功能被提升到函数的顶部,覆盖外部函数的a,所以aundefined

undefined++返回NaN,因此您的结果。

您的代码等效于:

function outer() {
    var a=2;

    function inner() {
        var a;
        a++;
        console.log(a); //log NaN
        a = 8;
    }

    inner();
}

outer();

通过这种方式重写代码,可以轻松查看正在发生的事情。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当变量和函数具有相同的名称时,引用将是什么?

在函数内部修改变量后,为什么变量未更改?-异步代码参考

为什么在函数内部使用let声明的某些变量在另一个函数中变得可用,而另一些变量导致引用错误?

函数内部的函数声明-为什么?

为什么我不能打印在函数内部声明的变量?

在JavaScript中,在函数内部声明变量,为什么函数获得更高的优先级?

如何在函数内部将名称中具有模式的所有变量放入列表中

在函数内部为dplyr使用变量名称

内联函数中具有内部链接的全局变量

嵌套函数中具有相同名称的变量

具有相同变量名的内部函数吊装

为什么可以修改在函数内部声明的静态const变量?

如果内部函数已经具有相同名称的变量,则如何从内部函数访问封闭函数中的非局部变量

在构造函数内部声明变量有什么用

在C ++中的类的函数内部声明变量

函数外部用cdef声明的变量在函数内部是否具有相同的类型?

在类声明中,为什么构造函数中的参数不能与私有部分中定义的变量具有相同的名称?

为什么我不必在类内部转发声明的函数或变量?

是否应在函数内部或外部函数中声明变量?

在内部函数和外部函数中声明变量有什么区别

在javascript中获取函数内部的变量名称

为什么构造函数中的全局变量和参数变量不能具有相同的名称?

在函数中已经存在的宏中声明具有相同名称的变量时,为什么没有收到警告?

jQuery:为什么在函数内部调用函数时函数返回全局变量?

函数内部的Javascript构造函数变量NAN

声明具有相同名称的局部变量时,函数变得不确定

是否可以在函数内部获取结果变量名称?

为什么函数内部的变量没有初始化?

在函数内部和外部声明变量有什么区别?