zoukankan      html  css  js  c++  java
  • 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中函数是一个密闭的独立的内存空间,所以函数就是一个词法作用域.

  • 相关阅读:
    Hive问题
    VirtualBox安装增强功能
    Shell脚本 数据清洗
    团队项目第一阶段冲刺站立会议06
    梦断代码阅读笔记1
    团队项目第一阶段冲刺站立会议05
    团队项目第一阶段冲刺站立会议04
    团队项目第一阶段冲刺站立会议03
    团队项目第一阶段冲刺站立会议02
    团队项目第一阶段冲刺站立会议01
  • 原文地址:https://www.cnblogs.com/chendu/p/5918357.html
Copyright © 2011-2022 走看看