• JavaScript预解析


    1 预解析

    1.1 预解析的基本步骤

    在JS引擎执行JS代码会分成三个步骤进行解析代码:

    第一步:JS引擎先将JS代码整体按照JS语言的规则进行分词,也就是JS代码的词法分析.

    第二步:然后JS引擎浏览JS代码,并对代码进行语法分析,这里只关注代码中变量的声明和函数的声明,这第二步也就叫预解析.

    第三步:从上往下,从左到右的执行代码.

    第一和第二步都是在执行代码前JS引擎内部执行的过程,尤其是第二步预解析的过程对JS代码的执行顺序有着极其重要的影响.

    而对于变量的声明和函数的声明,这两种声明在执行预解析的时候效果也是不同的.

    1.2 变量声明的预解析过程

    变量的声明是通过关键字var来实现的

    .当JS引擎遇到var时会首先在当前作用域中查找是否有声明过这个变量名,如果没有就在当前作用域中添加这个变量,如果有那该次声明就被视为无效.

    1.3 函数声明的预解析

    函数的声明分为两种:

    通过function函数声明的方式声明函数,在预解析的时候,首先在当前作用域中查找是否有声明过这个函数名的变量,如果没有在当前作用域中添加该函数名的变量,如果有则不再重复声明,然后给这个变量进行赋值,赋的值就是这个函数.

    但是通过函数字面量方式声明的函数就相当于变量的声明,所以函数字面量声明的情况和变量声明的预解析过程一样.不考虑赋值语句后面的执行.

    1.4 预解析的影响

    在执行代码前会,预解析过程会在各自作用域中将执行所有声明语句,这样我们就会觉得预解析将声明语句进行了提升.

    需要注意的是,声明的变量还是属于各自的作用域,预解析的过程不存在改变变量的作用域.

    1.5 词法作用域

    词法作用域指的是从代码的可读区域到不可读区域,形成的密闭的独立的内存空间.

    在每个词法作用域都会执行一遍新的词法分析,语法分析,执行代码三个JS引擎步骤,并且不影响其他词法作用域.

    在JS中函数是一个密闭的独立的内存空间,所以函数就是一个词法作用域.

  • 相关阅读:
    2020年全国安全生产月活动主题、挂图、招贴、标语、宣教用书等系列产品
    2020年安全生产月主题挂图指定宣教用品目录
    LNMP分离式部署步骤详解
    FTP文件传输服务
    DNS域名解析服务配置与测试
    DHCP服务搭建测试流程
    mysql数据库的操作
    mysql源码编译安装及其配置
    生产环境中ansible的安全处理
    http网页返回码详解
  • 原文地址:https://www.cnblogs.com/chendu/p/5918357.html
Copyright © 2020-2023  润新知