-
- 变量声明时发生的问题 对比: 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的区别
const和let完全相同,仅有一点在用const声明的变量,必须在声明时赋值,而且不可以重新赋值。在开发中,应该尽量使用const来声明变量,以保证变量的值不会被随意篡改原因如下:
.♞开发中许多变量是不需要被修改的。
.♞许多框架第三方JS库,要求数据不可变使用常量在一定程度上可以保证这一点。
注意细节:
1.常量不可变,指的是声明的常量的内存空间不可变,并不保证内存中地址指向的其他空间不可变。
2.常量的命名:
♬ 特殊的常量命名:该常量从字面意义上,一定是不可变的,比如圆周率,月地距离和其他的一些绝不可能变化的配置。该常量的名称一律使用大写,多个单词之间用下划线分割。 ♬ 普通的常量小驼峰命名法。
3.在循环变量里面不能使用常量。for in循环可以。