Javascript中的“域”、“预”、“译”,你真的掌握了吗?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
一、作用域的概念1、作用域有三种:全局作用域、函数作用域、块级作用域。(模块作用域) (1)全局作用域:这时最高级别的作用域,在这定义的函数以及变量可以在代码的所有地方被访问。在浏览器的环境中,全局变量实际是window对象的属性。例如:
(2)函数作用域(局部作用域):在每个函数内部声明的变量(未使用const、let关键字)、function声明的函数,这些对象具有局部作用域,它们只可以在函数内部访问。例如:
(3)块级作用域:这个作用域是在ES6引入了let和const关键字,避免因var声明的变量的变量提升(接下来会进行解释)现象,导致的让人匪夷所思的行为。这个作用域可以简单的理解为:{} + let/const例如:
注:(1) 以上作用域所指的是全局内、函数体内、块内的域,而词法作用域则是变量声明的地方,注意不是调用的地方。例如:我们的寝室是一个域,则该域的词法作用域就是这一栋寝室楼。 (2)欺骗词法作用域:
2、声明提升的概念与示例 概念:在变量声明和函数声明在代码执行前被提升,或者说移到,其包含的作用域的顶部的过程,发生在JS的编译阶段,导致了变量和函数可以在被声明之前就被访问。
即使函数
二、“预备与编译”--预编译的概念1、预编译发生在代码被执行之前,是JS引擎对代码的预处理,保证了变量和函数在使用之前已经被正确的设置。 2、全局预编译: (1)创建全局执行上下文GO(Global Object)。 (2)寻找变量声明,变量名作为GO的属性名,值为undefined。 (3)在全局找函数声明,函数名作为GO的属性名,值为函数体 画图实例:
3、函数中的预编译 (1)创建函数的执行上下文对象AO(Activation Object)。 (2)找到形参和变量声明,将形参和变量声明作为AO的属性名,值为undefined。 (3)将实参和形参统一 (4)在函数体内找到函数声明,将函数名作为AO的属性名,值为函数体。 画图实例: 注: 以上的执行上下文是被放在一个栈内,AO对象被放在变量环境中。在执行上下文中除了变量环境外,还有一个词法环境,用于 画图实例:
该文章在 2024/5/29 10:44:20 编辑过 |
关键字查询
相关文章
正在查询... |