变量声明
ES5 ECMAscript 规范 js实现
var
- 声明提前
var x= 5;
function f( ){
console.log(x); // undefined
var x = 10;
}
f()
等同于
var x = 5;
function f() {
var x;
console.log(x);
x = 10;
}
f();
ES6 ECMAscript 规范 js实现
let
- 不存在变量提升
console.log(c);
var c = 'c';
/**
* var c; js预解析
* console.log(c); // undefined
* c = 'c'
*/
let c = 'd' // error
- 同一个作用域下不能重复定义同一个名称
let t = 1;
// let t = 100; //error
t = 100; // ok
console.log(t);
- 有着严格的作用域 var 属于函数作用域 let属于块级作用域
function fun() {
var n=10; // 函数作用域
if(true) {
var n = 100;
}
console.log(n) // 100
}
function fun() {
let n=10; // 块级作用域
if(true) {
let n = 100;
}
console.log(n) // 10
}
const
- const 声明一个只读的常量,一旦声明,常量的值就不能改变,引用类型可改
const w = 100;
w = 200; // error
console.log(w);
const r; //error 一定初始化,不能只声明不赋值
const arr = {};
arr.a = '123';
console.log(arr) // {a:123}