关于js解析的问题

var a = 100
var b = function() {
    console.log(a)
    var a = 1;
}
b()




var a = 100
var b = function() {
    var a = 1;
    console.log(a)
}
b()

第一段代码打印undefined 第二段代码打印1。 我的问题是第一段不应该打印1吗,因为赋值声明会提前于执行语句,即使不打印1应该打印全局a的那个值 100?
阅读 2.1k
4 个回答

js执行顺序

var a;
var b;
a = 100
b = function() {
    var a;
    console.log(a)
    a = 1;
}
b()
a = 100
b = function() {
    var a;
    a = 1;
    console.log(a)
}
b()

我仅说第一段代码(相当于这样执行的):

var a = 100
var b = function() {
    var a;  //变量声明提升
    console.log(a); //这时打印应为undefined
    a = 1;
}
b()

去firefox mdn查变量提升

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