声明前置:JS在执行每一段JS代码之前,会有js解析器:先把 var 和 function 声明的变量前置

作用域:可以理解为是一个执行环境,更通俗一些理解成,在什么样的空间范围内进行读,写

作用域链:当我们在局部作用域中,访问一个变量时,系统首先会在当前作用域中寻找变量var的声明语句,如找到则直接使用。反之,则继续向上一级作用域中寻找var的声明语句,如找到则直接使用,反之,继续向上一级作用域中去寻找…直到全局作用域,如找到则直接使用,如未找到则直接在全局作用域中声明该变量,这种链式查询关系就是作用域链!



JS是一种脚本语言, JS的执行过程, 是一种翻译执行的过程,这个翻译叫“预编译(预解析))”

JS在执行每一段JS代码之前,会有js解析器:先把 var 和 function 声明的变量前置, 再去按顺序逐行执行代码

1.声明前置

eg.

js-声明前置、作用域、作用域链


.遇到重名的变量只留一个:变量与函数重名留函数;其余按顺序覆盖;
js-声明前置、作用域、作用域链
.script是全局函数,以段为处理单元,会自上而下解析

js-声明前置、作用域、作用域链

2.作用域链,由里到外,自上而下顺着链爬

js-声明前置、作用域、作用域链

eg.

js-声明前置、作用域、作用域链

分别等价于

js-声明前置、作用域、作用域链

tip:
.参数的本质是局部变量
.表达式可以修改预解析的值(+-*/%++--!参数)

相关文章: