JS预编译原理

一 预编译之前基本概念:

1  函数形参(parameter)和实参(argument)的区别:形参相当于函数中定义的变量,实参是在运行时的函数调用时传入的参数。即:形参就是函数声明时的变量,实参是我们调用该函数时传入的具体参数。

1   function add(a, b) {
2     return a + b // a,b就是形参
3   };
4   add(1, 2) // 1,2就是实参

2 js变量名与函数重名问题:https://blog.csdn.net/Charles_Tian/article/details/79775909

注意:函数作用域是首先从内部查找,由里向外顺序查找.

  • 要知道js解析变量声明的顺序
  • 函数声明和变量声明会置顶且函数声明更优先!
  • 作用域链的查找顺序是由里向外,js执行代码顺序是自上往下

二 js预编译过程:https://blog.csdn.net/qq_42383764/article/details/105229455

js运行代码共分三步

1. 语法分析,语法分析就是浏览器先浏览一下整体的代码有没有少写分号、单词拼错等语法的错误。

2. JS预编译。本质是创建AO对象或GO对象,对其属性的操作。预编译发生在函数执行前一刻。

3. 解释性执行。就是一行一行的读取代码执行代码。

 

全局域解析:GO:Gobel Object,是全局对象,GO对象跟window对象是同一个对象。可以理解为window对象有两个名字 window == GO。 

函数JS预编译:AO对象:Activation Object,指活动性对象,也叫执行期上下文,就是我们通常所说的作用域。这里指函数的局部作用域。预编译时AO对象的属性对应的属性值,会在后续代码执行过程中发生变化,也就是会被覆盖。

 

 

语法分析常见错误分析:https://www.cnblogs.com/terrymin/p/14542419.html

 

posted @ 2021-03-16 11:51  TerryMin  阅读(156)  评论(0编辑  收藏  举报