ES6定义
ECMA script2015以后的
let 与 const
var的缺陷
- 没有块级作用域,导致var在for/if内声明的变量可以被全局访问;(ES6之前的解决办法使用IIFE-立即执行函数)
- 变量提升,使代码不好理解。举例:
var a = 1;
function show(){
console.log(a);
var a = 2;
}
show(); //结果是a undefined
复制代码
let的用法
- let声明的变量有块级作用域,只在作用域内有效;
注意:let const 在全局声明的变量并不指向window
- let声明的变量没有变量提升;在代码块内,let声明变量之前的区域(TDZ 暂时性死区)使用变量都会报错, 必须先声明在使用;
- let在同一个作用域内,不能重复定义变量,可以赋值;
- 对于for(){} 类似的结构来讲,()内的代码块可以看作{}代码块的父级;
const的用法
- const块级作用域和变量提升等方面与let一样;
- const定义变量时,必须初始化赋值,不可以先声明后赋值;
- const声明的常量,不能重复赋值修改;
- 对于对象来说,由于赋值给const常量的是引用,所以可以直接对属性进行修改,或者通过push的操作修改数组;
- 如果想创建不能修改的对象可以使用Object.freeze;
const obj1 = Object.freeze(obj);
变量解构赋值
- 在数据交换,如AJAX,JSON数据的处理上非常有用。
let json = { name: murphy, age: 18, job: coder } let {name, age=20, job:j} = json; //'='后面是默认值,':'后面是别名 复制代码
- 左右结构格式应该保持一致
- 举例: 简化变量值的交换
let a =12; let b = 5; [a,b] = [b,a]; 复制代码