ES6新特性之let const
1 let关键字
1.1 let声明变量形式:
let a; //声明一个变量
let b,c,d; //同时声明多个个变量
let e = 1; //声明一个变量同时赋值
let f = 2, g = 'string', h = []; //声明多个变量同时赋值
1.2 let 关键字用来声明变量,使用 let 声明的变量有几个特点:
(1) 不允许重复声明
let str = 'hhh';
let str = 'wqe';
console.log(str); //会显示Uncaught SyntaxError: Identifier 'str' has already been declared
(2)块级作用域(作用域分为全局、函数、eval)
// if else while for 等 {}里面的作用域都是块级作用域
{
let name = 'hai';
}
console.log(name); //会显示name is not defined
(3)不存在变量提升(变量可以在使用后声明,也就是变量可以先使用再声明,即函数及变量的声明都将被提升到函数的最顶部;var声明存在变量提升,let const声明不存在变量提升)
console.log(song); //输出undefind
var song = 'music';
console.log(song); //会显示song is not defined
let song = 'music';
(4)不会改变作用域链
{
let st = 'fs';
function fn(){
console.log(st); //fs
}
fn();
}
2 const 关键字
2.1 const 声明常量
// 声明常量
const SCHOOL = 'xinankd';
2.2 const 关键字用来声明常量,const 声明有以下特点
(1)const 在声明时必须赋初始值
const A; //错误声明使用
const SCHOOL = 'xinankd'; //正确声明使用
(2)不能重复声明
let STR = 'hhh';
let STR = 'wqe';
console.log(STR); //Identifier 'STR' has already been declared
(3)常量声明的值不能被修改
const SCHOOL = 'xinankd';
SCHOOL = 'XNKD';
console.log(SCHOOL); //Uncaught TypeError: Assignment to constant variable.
(4)块级作用域(与let 一致)
{
const XA = 'nnn';
}
console.log(XA); //显示XA is not defined
(5)对象属性修改和数组元素变化不会出发 const 错误
const LIKE = ['music','sleep','sheep'];
LIKE.push('book');
console.log(LIKE); //["music", "sleep", "sheep", "book"]
通常来说,声明对象类型的变量使用const,声明非类型的变量使用let会好一些。
3 var let const 的区别
(1)var的作用域为全局作用域,声明的变量为全局变量;let、const声明的局部变量,作用域为块级作用域
(2)在同一作用域内,var 可以重复声明同一个变量;let、cons不可以
(3)var、let 可以先声明变量再赋值且可以修改;const 必须在声明的时候就赋初始值且不能再做修改
(4)var 存在变量提升,let、const不存在变量提升