预解析
预解析
- 代码运行到浏览器,浏览器提供了一个供JS代码执行的环境(栈区),在代码执行之前先进行预解析;预解析完成了,代码才会执行。
- 预解析又称为变量提升,预解析会对所有(全局与局部)带有var和function关键字的进行预解析;
- 预解析分为以下两部分:
- 声明 var a;
- 定义 a=100;(赋值)
- var的预解析只声明不定义;function的预解析声明+定义(function在预解析的声明+定义已经完成了)
知识点:
js中分为两大区域
- 栈区:提供代码运行的环境
- 堆区:存储引用数据类型的值
js中一旦遇到引用数据类型,就会开辟一块堆内存,将引用数据类型的值进行储存,并给这块堆内存分配一个16进制地址。
函数执行会生成一个私有作用域,里面代码从上到下执行。(栈区)
栗子1:
1 | console.log(a,b); //undefined undefined |
解析:
先进行预解析,预解析完了,代码从上往下开始运行;堆区是存储的,栈区才是代码执行;
栗子2:
Tips:先把外层的函数合起来,这样就好分析了。
1 | console.log(a, b); //undefined undefined |
解析:
栗子3:
Tips:先把外层的函数合起来,这样就好分析了。
1 | var a = 100; |
知识点:
作用域链:
作用域链,是一种查找机制,在当前作用域下用到某个变量或方法,先看当前这个作用域有没有,有先用自己私有的,没有往上一级作用域进行查找,上一级作用域没有,再往上一级作用域进行查找,知道找到全局作用域为止(window为止)
PS:函数执行完成会自动销毁,定义一个函数可以调用无数次,每次相互独立的;即从xxxfff000<=>test(1)执行完,就销毁释放内存了;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Forward の Blog!
评论