再问JS变量提升

之前问了一次变量提升的问题,但是我又发现了一个问题,就是函数b里面嵌套的函数名称不一样得到的结果不一样,这点就让我更困惑了,那例1和例2中的输出怎么解释?
例1:

let a = 123
function b() {
    a = 456
    function a() {
        a = 789
    }
}
b()
console.log(a)

例2:

let a = 123
function b() {
    a = 456
    function c() {
        a = 789
    }
}
b()
console.log(a)

题目来源及自己的思路

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 1.5k
2 个回答

例1:

function b() {
    a = 456
    function a() {
        a = 789
    }
}

// 相当于
function b() {
    var a
    a = 456
    function a() {
        a = 789
    }
}
// 改变的是b函数里面的a,外部let a =123不影响

例2:

function b() {
    a = 456
    function c() {
        a = 789
    }
}
// 相当于
function b() {
    var c
    a = 456 // 这里获取的是外部的let a
    // c是声明,没有执行
    function c() {
        a = 789
    }
}

变量提升反人类,且在工作中非常不利于重构。别写了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题