zoukankan      html  css  js  c++  java
  • var重复声明为什么后续声明会被忽略

    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)
    
  • 相关阅读:
    JavaScript中的分支结构
    JavaScript中的函数
    JavaScript的数据类型转换
    javascript 概述及基础知识点(变量,常量,运算符,数据类型)
    关于检索关键字的常用四种方法
    Array.prototype.sort()
    String()与toString()区别和应用
    关于css的优先级
    android--asp.net webservice 返回json
    android--handler
  • 原文地址:https://www.cnblogs.com/zoo-x/p/14803785.html
Copyright © 2011-2022 走看看