• JavaScript预编译原理分析


    一直对变量对象,活动对象,预编译,变量提升,执行上下文的时间顺序有着凌乱的认识,但是这些对理解JS语法有着很重要的作用。读了很多人的文章,都没有一个特别清晰的把这些写出来。

    今天主要总结一下现阶段自己的认识。

    JS是解释型语言,底层是C写的,写完代码后需要解释器解析成c,再转成二进制文件才能执行。

    所以一个JS代码块,先全局的词法分析(变量声明(提升)、函数声明,创建全局变量)语法分析(构建语法树,查看有没有语法错误),静态作用域

    全局上下文推入执行栈(全局变量对象window,全局作用域Global,确定this指向,this==window),执行代码(变量赋值,函数引用)。

    遇到函数。执行函数前,将函数执行上下文推入执行栈,创建函数执行上下文(创建变量对象(注意),建立作用域链,确定this指向)

    注意:变量对象创建分为:参数对象创建,即arguments对象

    函数声明:检查当前上下文的函数声明,也就是使用function关键字声明的函数。在变量对象中以函数名建立一个属性,属性值为指向该函数所在内存地址的引用。如果函数名的属性已经存在,那么该属性将会被新的引用所覆盖。
function声明会比var声明优先级更高一点。

    变量声明:检查当前上下文中的变量声明,每找到一个变量声明,就在变量对象中以变量名建立一个属性,属性值为undefined(提升)。如果该变量名的属性已经存在,为了防止同名的函数被修改为undefined,则会直接跳过,原属性值不会被修改
    执行代码:变量对象变活动对象,变量赋值,函数引用。



  • 相关阅读:
    Socket基础一
    MyBatisPlus【目录】
    MyBatis(十一)扩展:自定义类型处理器
    MyBatis(十一)扩展:批量操作
    MyBatis(十一)扩展:存储过程
    MyBatis(十一)扩展:分页插件PageHelper
    MyBatis(十)插件 4
    09月07日总结
    09月06日总结
    09月03日总结
  • 原文地址:https://www.cnblogs.com/ziqian9206/p/7229941.html
Copyright © 2020-2023  润新知