zoukankan      html  css  js  c++  java
  • JS作用域理解

    作用域内部原理的过程:

    1.编译:编译过程将程序分解成词法单元,然后将词法单元解析成抽象语法树(AST),最后将AST转换成机器指令来等待执行的过程

    2.执行:   引擎运行代码时,首先查找当前作用域是否含有该变量,如果在,则就会直接使用该变量,否则引擎还会继续查找直到查到该变量然后进行操作(比如赋值),如果找不到则会抛出异常

    3.查询:当如果执行赋值操作,就会使用LHS查询,如果是函数调用的时候就会用RHS查询

    4.嵌套:查找机制是从内到外进行不断查找,在当前作用域下无法找到某个变量时,就会在外层嵌套的作用域中继续查找,知道找到该变量,或者是抵达最外层作用域也就是全局作用域为止

    5.异常:在查询中如果有未声明的变量之类的就会报错

    作用域:

    1.词法作用域

    ☆ 遮蔽: 在多重嵌套作用域中,可以定义同名字的标识符,这就叫做遮蔽效应

    ☆ 变量的声明提升(在js中是边解释边执行的,无编译阶段): 在遇到有var的变量声明的时候会提升到最前面,也就是预解释过程中的变量提升,就是提前解释好

    ☆ 函数的声明提升,function() {}可以提升,var x = function () {}无法提升,var x = function abc() {}具名也无法提升

    注意:变量的声明优先于函数的声明,但是函数的声明会覆盖未定义的同名的变量,如果是已定义的变量,则不会覆盖

  • 相关阅读:
    编程是点滴的积累
    Tech.ED 2005 北京 第二天印象
    Tech.ED 2005 北京 第三天印象
    别把事情弄的太复杂
    在看《青衣》
    可以用的开源包
    KVM虚拟机的性能问题
    [zz]kvmlibvirt的使用:创建虚拟机与快照
    KVM快照snapshot
    [zz]kvm环境快照(snapshot)的使用方法
  • 原文地址:https://www.cnblogs.com/xzsblog/p/13110851.html
Copyright © 2011-2022 走看看