一般在声明变量时候,会常常使用var声明变量:
var i = 1;
console.log(i); // 1
但是值声明在不赋值的情况下,i值会变成undefind
var i;
console.log(i); // undefined
在不同作用域去声明
var在全局作用域下赋值后,在块级作用域可以调用
var i = 2; // 全局作用域
function test(){ // 函作用域
var j = 3;
console.log(i + j); // 5
}
test();
如果在声明之前去打印j的值会显示undefined
function test(){ // 函作用域
console.log(j); // undefind
var j = 3;
}
test();
这里相当于var j的变量提升,等同于
function test(){ // 函作用域
var j;
console.log(j); // undefind
j = 3;
}
test();
这里在说明块级作用域,就是通常存在if,for,function中的{}
let没有变量提升
function test(){ // 函作用域
console.log(j); // 报错
let j = 3;
}
test();
而且let声明过的变量不能再重复声明,这点跟const一样
let i = 3,
let i = 5; // 报错
console.log(i)
而const声明的变量必须是常量,也不能修改
const i; // 报错
i = 3;
console.log(i)
const i =4;
i = 3; // 报错
console.log(i)