let 和var
- 变量提升
console.log(a);
var a='这是A';
//等效于
var a1;
console.log(a1);
//输出为undefined
变量的提升不包括值得提升
如果使用let
console.log(b);//直接报错了不向下运行
let b = '这是B';
let b1;
console.log(b1);
b1 = '这是B1';
- 重复定义
var a1 = 100;
var a1=101;
console.log(a1);//输出100
使用let
let b1 = 100;
let b1=101;//Uncaught SyntaxError: Identifier 'a1' has already been declared
console.log(b1);
注意,使用let时候只是不能重复定义,但是可以修改
let b1 = 100;
b1=101;
console.log(b1);//101
- 作用域
function fun() {
var n = 10;
if (true) {
let n = 100;
}
console.log(n);//10
}
fun();
var函数作用域,let块作用域
下面例子加深一下印象
if (true) {
var a = 100;
let b = 9;
}
console.log(a);//100
console.log(b);//Uncaught ReferenceError: b is not defined
const
和let相似,使用更严格
申明一个只读的变量,一旦定义好了常量的值就不可以修改
const a=1000;
a=10;//Uncaught TypeError: Assignment to constant variable.
这里得注意是常量,如果是引用数据类型比如数组对象,存储的是引用地址,是可以修改的
const a = {};
a.name = 'any';
console.log(a);//{name: "any"}
- 必须得初始化定义好
const a;
a=10;//Uncaught SyntaxError: Missing initializer in const declaration