var let const的比较

192 阅读2分钟
    1. 变量声明时发生的问题 对比: var与let声明变量的区别; ☞1.var能重复声明变量,导致数据被覆盖

☞2. 变量提升,导致的怪异的数据访问。 {没有声明的变量输出会报错色的但是由于。es6里面的变量声明提升这里不报错}

☞3.变量提升,闭包问题(循环只能输出10 个11)《写一个立即执行函数包裹起来》

☞4.var声明的变量在全局,导致全局对象污染,挂载在全局对象windows里面

*ES6里面的关键字let

☞1.声明的变量在局部

☞2.变量不允许在当前作用域重复声明

☞3.变量声明不会被提升

★块级作用域的概念一对大括号包裹的,块级 作用域执行完会立即被销毁

♥底层实现上,let声明的变量实际上是有提升的,但是提升后会将其放入到“暂时性死区”,如果访问的变量放在暂时性死区,则会报错“Cannot access ‘a’before initialization”当代码运行到代码声明的位置时会将代码从暂时性死区移除。

♥在循环中,用let声明的循环变量,会特殊处理,每次进入循环体,都会开启一个新的作用域,并且将循环变量绑定到该作用域,(每次循环,使用的是一个全新的循环变量)

*ES6关键字cons

☞1.let和const的区别

     constlet完全相同,仅有一点在用const声明的变量,必须在声明时赋值,而且不可以重新赋值。在开发中,应该尽量使用const来声明变量,以保证变量的值不会被随意篡改原因如下:
       .♞开发中许多变量是不需要被修改的。
       .♞许多框架第三方JS库,要求数据不可变使用常量在一定程度上可以保证这一点。
       

注意细节:

1.常量不可变,指的是声明的常量的内存空间不可变,并不保证内存中地址指向的其他空间不可变。

2.常量的命名:

♬ 特殊的常量命名:该常量从字面意义上,一定是不可变的,比如圆周率,月地距离和其他的一些绝不可能变化的配置。该常量的名称一律使用大写,多个单词之间用下划线分割。 ♬ 普通的常量小驼峰命名法。

3.在循环变量里面不能使用常量。for in循环可以。