美文网首页JS学习笔记
JS作用域(1)- 预编译

JS作用域(1)- 预编译

作者: zh2443 | 来源:发表于2018-10-30 22:55 被阅读0次

本篇文章开始说道js的作用域知识,本篇主要讲前奏的预编译。

JS执行三部曲

js的执行分为三步:

1. 语法分析

2. 预编译

3. 解释执行

语法分析:通篇分析程序是否有语法错误;解释执行:即读一句程序执行一句;而预编译作为一个很重要的环节,主要发生在程序执行之前的一刻,对于函数,预编译发生在函数执行之前,所以对于预编译来说,分成2部分:整个程序执行前的预编译和函数执行前的预编译,它们的过程是相同的,只是一个生成GO对象,一个生成AO对象。

预编译四部曲

1. 创建AO(Activation Object 执行期上下文)或GO(Global Object 全局执行期上下文,也即window对象)对象

2. 找形参和变量声明,将它们作为对象的属性名,值赋值为undefined

3. 将实参和形参统一(实参的值赋值给形参)

4. 找函数声明,将函数名作为对象属性,值赋值为函数体

以上即为预编译的四个步骤,下面做实例讨论:

1. 创建AO

AO = { };

2. 找形参和变量声明

AO = {

    a : undefined,

    c : undefined,

    b :undefined

};

3. 实参形参统一

AO = {

    a : 1,

    c : undefined,

    b :undefined

};

4. 找函数声明

AO = {

    a : function a(){},

    c : undefined,

    b :undefined,

    d : function d(){}

};

预编译完成后,执行函数,得到如下结果:

注意:

1. 条件语句对预编译生成AO或GO对象没有任何影响,里面的变量或函数声明依然会加到对象中;

2. 预编译是生成执行期上下文,在函数执行时,会进行上下文属性的赋值工作。

相关文章

  • 成长(4/2000)——面试题合集1

    Javascript 1.作用域 概念: 作用域分全局作用域和函数作用域 预编译 js的两个阶段,预编译和解释执行...

  • JS作用域的练习

    Js作用域练习demo1 Js作用域练习demo2 JS作用域练习demo3 JS作用域练习demo4 JS作用域...

  • 你不懂的js上卷(一)

    基本概念 js引擎 编译器 作用域变量赋值操作 词法作用域(定义词法阶段的作用域) 1.由变量或者函数声明时的...

  • JS基础:作用域

    一、作用域概念-预解析规则、表达式 作用域: 域:空间,范围,区域……作用:读,写 浏览器——JS解析器: 在浏览...

  • JS高级-闭包、沙箱

    作用域,作用域链,预解析 变量:局部变量、全局变量 作用域:变量的使用范围 js中没有块级作用域,一对括号中定义的...

  • JS作用域

    一、js作用域概念---预解析规则,表达式 域:指的是一个空间、范围、区域 作用:通常指读和写 所以 作用域:指的...

  • JS 作用域链、导入导出

    1. JS 的作用域链 作用域在 JS 中表示变量的可访问性和可见性。JS 作用域有 3 种:1. 全局作用域;2...

  • JS作用域(1)- 预编译

    本篇文章开始说道js的作用域知识,本篇主要讲前奏的预编译。 JS执行三部曲 js的执行分为三步: 1. 语法分析 ...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • JS预解析&作用域

    一、预解析过程预解析:在js文件或者script里面的代码在正式执行开始之前,进行的一些解析工作,就是在全局中寻找...

网友评论

    本文标题:JS作用域(1)- 预编译

    本文链接:https://www.haomeiwen.com/subject/cdwntqtx.html