ES6新增----let const var的区别
参考学习:https://www.cnblogs.com/LLLLily/p/7389652.html
- var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
- let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
- const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
ES6的let变量声明特点:
1. 拥有块级作用域
2.没有变量声明提升
3.暂时性死区
4.不能重复声明
5.let不会成为全局对象的属性
以上let所介绍的规则均适用于const命令,不同的是,const声明的变量不能重新赋值,也是由于这个规则,const变量声明时必须初始化,不能留到以后赋值
1.拥有块级作用域:
let声明的变量只在所声明的代码块内有效。块级作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。
{
var a = 10;
let b = 20;
}
console.log(a); //10
console.log(b); // ReferenceError: b is not defined
var a =[];
for( var i=0; i<10; i++ ){
a[i] = function(){
console.log(i);
}
}
for( var j = 0; j<a.length; j++ ){
a[j](); //输出10个10。 因为i是var声明的,在全局范围内都用,每次新的i都会覆盖原来的。
}
var a =[];
for( let i=0; i<10; i++ ){
a[i] = function(){
console.log(i);
}
}
for( let j = 0; j<a.length; j++ ){
a[j](); //输出 0,1,2,...,9
}
2.没有变量声明提升:
使用let声明的变量,不会像使用var那样存在“变量提升“”的现象。所以使用let声明变量,必须遵循“先声明,后使用”的原则。否则会报错
console.log(a); //ReferenceError
let a = 10;
如果是var声明的变量,则不会报错。
console.log(b); //undefined
var b = 10;
3.暂时性死区:
在代码块内,使用let声明变量之前,该变量都是不可以使用用
只要在同一作用域内存在let命令,他所声明的变量就“绑定”在这个作用域内,不管外部有没有声明
let a =10;
function fn1(){
console.log(a);
let a = 5;
}
fn1();//Uncaught ReferenceError: a is not defined
4不能重复声明
在同一作用域内,如果使用var声明同一个变量,则后面的覆盖前面的
var a = 10;
let a = 10;
console.log(a);//Uncaught SyntaxError:
Identifier 'a' has already been declared
let a = 10;
let a = 15;
console.log(a);//Uncaught SyntaxError:
Identifier 'a' has already been declared
5.let不会成为全局对象的属性