JS中var、let和const之间的区别
var | let | const | |
---|---|---|---|
变量 | 提升 | 没有提升 | 没有提升 |
作用域 | 只要不是在function里就是全局变量 | 配合{}可以形成块级作用域 | 也会形成块级作用域 |
是否挂在到GO上 | 是 | 否 | 否 |
是否能重复声明 | 能 | 否 | 否 |
赋值 | 可以不赋值 | 可以不赋值 | 必须赋值 |
注意:关于let声明的变量是否提升,也有的说let声明的变量也提升了,只是没有初始化。
声明变量使用let,声明常量使用const,一般不使用var
关于变量
console.log(a); //cannot access 'a' before initialization
console.log(b); //cannot access 'b' before initialization
let a = 110;
const b = ;
关于作用域
if(true){
var a = 110; // 全局变量
// b和c只能在当前的{}中被访问到 出了块就访问不了
let b = 666; // let + {} 形成块级作用域
const c = 111;
}
console.log(a);//输出110
console.log(b); // b is not defined
console.log(c); // c is not defined
关于是否挂载在GO中
let a = 110;
console.log(window.a); // undefined 访问一个对象上没有属性,得到的就是undifined
const b = 1;
console.log(window.b); // undefined
var c = 2;
console.log(window.c);//输出2
关于是否能重复声明
let a = 1;
let a = 2;
console.log(a); // Identifier 'a' has already been declared
const a = 1;
const a = 2;
console.log(a);//Identifier 'a' has already been declared
var a = 1;
var a = 2;
console.log.(a);//输出2
关于赋值
var a;
let b;
const c;
//Uncaught SyntaxError: Missing initializer in const declaration
//语法错误:只要是语法错误,代码就没有执行的机会