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

posted @   w0000  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示