js 预解析
#### 预解析
- 在当前作用域下(函数作用域),js代码执行之前,浏览器会默认把var,function声明(匿名函数没有function声明,所以不会提升)的变量在内存中进行提前声明或定义.(未赋值,undefined)
- 变量提升,
- 只提升声明,不提升赋值
- 全局变量不进行预解析
```
var a=b=c=0;//a进行变量提升,b c为全局变量
```
- 函数提升
- 函数声明 代表函数整体,函数提升后,函数名代表整个函数,但函数并没有被调用
```
fn();//f
function fn() { console.log('f'); }
```
- 函数表达式 创建函数,会执行变量提升,函数体未提升。
```
fn();//报错, fn is not a function
var fn = function() { console.log('f'); }
```
##### 注
- es6中的class和let const一样都不存在变量提升,但是都有暂时性死区。
暂时性死区:
ES6 明确规定,如果区块中存在let和const命令(class),
这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。
凡是在声明之前就使用这些变量,就会报错。
https://blog.csdn.net/weixin_43887184/article/details/105512242
本文来自博客园,作者:w0000,转载请注明原文链接:https://www.cnblogs.com/w0000/p/16135678.html