重新声明
- 在
ES6
之前可以重新声明定义同一var
变量,例如:
var x = 10;
var x = 2;
console.log(x);//输出2
- 在
ES6
中的let
不能在同一作用域
中重新声明变量
声明提升
- 在
ES6
之前,变量可以先赋值使用
后再声明,例如:
x = 10;
console.log(x);//输出10
var x; //不声明也行
//扩展
"use strict";//ES5新增的严格模式
y = 10;
console.log(y);//输出10
var y; //在严格模式之后的代码,不声明会报not defined错误
函数声明和变量声明总是会被编译器“悄悄地”移动到最前面
- 在
ES6
中的let
必须先声明再使用
作用域
- 在
ES6
之前只有两种作用域:全局变量和函数内的局部变量,都用var
关键字声明。例如:
var x = 10;//全局
(function Text() {
var x = 2;//局部
console.log(x);//输出2
})()
console.log(x);//输出10
上面用var声明的全局变量x值可以调用window.x输出,若使用let声明则不行
- 在
ES6
中新增的块级和循环作用域,用let
关键字声明。例如:
//块级作用域
var x = 10;
{
let x = 2;
}
console.log(x);//输出10
//循环作用域
var x = 10;
for(let x = 0; x < 2; x++) {}
console.log(x);//输出10
上面的两块代码中的let如果换成var,则输出2
const常量
const
与let
一样都具有块级作用域,都不能在同一作用域
中重新声明变量,区别是const
使用前必须先初始化且初始化后无法重新赋值。
虽然无法重新赋值,但可以改变对象
(JSON)或者数组
中的值,例如:
const fruits = {name:"apple", color:"red", sum:"10"};
// 修改属性
fruits.sum = "100";
// 添加属性
fruits.owner = "liveJQ";
评论区