首页 > 其他 > 详细

var重复声明为什么后续声明会被忽略

时间:2021-05-24 15:04:20      阅读:21      评论:0      收藏:0      [点我收藏+]
var a = 1
var a
console.log(a)

上面这段代码输入1,为什么第二次声明没有覆盖第一次声明呢?

var a = 1
var a = 2
console.log(a)

上面这段代码输出2,这里为什么第二次声明又覆盖了第一次声明呢?

这要从js代码运行机制说起:
在JS代码运行过程中:
引擎负责整个代码的编译和执行,编译器负责语法分析、词法分析、代码生成等,而作用域则负责维护所有的标识符(变量)
当执行上面的代码时,可以简单的理解为给新变量分配一块内存,命名为a,并赋值为1;但在运行的时候编译器与引擎还会进行两项额外的操作,即判断变量是否已经声明:
1.首先编译器对代码拆解,从左往右遇到了var a, 然后去询问作用域是否存在这个变量,如果不存在就让作用域声明一个新的变量a,如果存在就忽略var继续往下编译,这时a=1被编译成可执行的代码供引擎使用
2.引擎遇见a=1时也会去询问作用域是否存在这个变量,若存在,则赋值为1,若不存在,就沿着作用域往上查找,若找到了,赋值为1,若没找到,让作用域声明一个新的变量a

用代码解释上述执行过程就是:

var a
a = 1
//  var a  忽略
console.log(a)
var a
a = 1
//  var a  忽略
a = 2
console.log(a)

var重复声明为什么后续声明会被忽略

原文:https://www.cnblogs.com/zoo-x/p/14803785.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!