• 为什么var可以重复声明


    总结自:https://blog.csdn.net/DurianPudding/article/details/87953939

    一言以蔽之:编辑器会在作用域判断这是重名声明时,忽略var直接赋值

    首先说明JS代码运行时三者的作用:

    引擎负责整个代码的编译以及运行

    编译器则负责词法分析、语法分析、代码生成等工作

    作用域负责维护所有的标识符(变量)。

    例:

    var a = 2;
    var a = 3;
    a = 4;
    alert(a); // 4

    重复声明时:首先,编译器对代码进行分析拆解,当遇见var a,则询问作用域是否已存在叫a的变量,若不存在,则要求作用域声明一个新的变量a,若已存在,则忽略var继续向下编译

    赋值时:引擎遇见a=2时同样会询问在当前的作用域下是否有变量a。若存在,则将a赋值为2;若不存在,则顺着作用域链向上查找,若最终找到了变量a则将其赋值2,若没有找到,则招呼作用域声明一个变量a并赋值为2(这就是为什么第二段代码可以正确执行且a变量为全局变量的原因,当然,在严格模式下JS会直接抛出异常:a is not defined)。

  • 相关阅读:
    LeetCode_4——寻找两个有序数组的中位数
    Java的CAS与ABA问题
    跨域问题解决
    解决git-for-windows官网下载速度慢的问题
    Java对观察者模式的支持
    Java动态代理
    设计模式七大原则
    UML中的类图关系
    布隆过滤器(Bloom Filter)与Hash算法
    Ubuntu16安装fabric1.4.4环境
  • 原文地址:https://www.cnblogs.com/yanze/p/11450993.html
Copyright © 2020-2023  润新知