ES6新增的Let、Const和Var的区别。
Let和Var区别
1.变量提升
//Var可以变量提升
console.log(a); //a=undefined
var a = 3;
//Let不可以变量提升
console.log(a); //报错:UncaughtReferenceError: a is not defined
let a = 3;
2.块级作用域
//在ES6之前,var 只有全局作用域、函数作用域
var a = 1;
{
var a = 10;
}
console.log(a);// a = 10;
//在ES6出来后,Let 不仅有全局作用域、函数作用域、还有块级作用域。
let a = 1;
{
let a = 10;
}
console.log(a);// a = 1;这里块内的a = 10对外部的全局作用域没有影响
依次类推,在for循环中的也是遵循上述规则的
var a = 5;
for(var a = 0 ;a<10;a++){
......
}
cnosole.log(a);//a=10;
var a = 5;
for(let a = 0;a<10;a++){
......
}
console.log(a);//a = 5,for循环中用let声明不影响外部作用域
3.重复声明
//在相同作用域中,用var重复声明同一变量是可以的
var a = 1;
var a = 3;//允许
//在相同作用域中,用let 重复声明同一变量是不可以的
let a = 1;
let a = 3;//不允许
4.Html中的Window对象
//在全局作用域中var声明的变量属于Window对象
var name = "ranmo";//此处可以使用Window.name
//在全局作用域中let声明的变量不属于Window对象
let name = "ranmo";//此处的变量不可以使用Window.name
Const和Var区别
Consrt其实和Let是类似的
但是也有区别:
1.声明时赋值
//Var可以先声明,后赋值。
var a;
a = 3;
//Const必须声明时立即赋值
Const a = 3;
2.常说Const是声明常量的且不可修改,其实不够准确,
应该说:Const是这个常量包括常量值和常量对象。
//对于常量值,一旦声明并赋值,就不可以修改
const PI = 3.141592653589793;
PI = 3.14; // 会出错
PI = PI + 10; // 也会出错
//但是对于常量对象,还是可以视情况修改的
// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};
// 您可以更改属性:
car.color = "White";
// 您可以添加属性:
car.owner = "Bill";
//但是你无法重新为常量对象赋值
const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"}; // ERROR
// 您可以创建常量数组:
const cars = ["Audi", "BMW", "porsche"];
// 您可以更改元素:
cars[0] = "Honda";
// 您可以添加元素:
cars.push("Volvo");
//但是你无法重新为常量数组赋值
const cars = ["Audi", "BMW", "porsche"];
cars = ["Honda", "Toyota", "Volvo"]; // ERROR
3.块级作用域
此处和Let类似,不再过多赘述,Const有块级作用域,内部不影响外部,Var没有。
4.变量提升
此处和Let类似,不再过多赘述,Const没有变量提升,Var有变量提升。