var、let、const
var、let和const都是声明的关键词,var和let都是声明变量,const声明常量,常量一旦声明不能再赋值,变量可以。 比如:
var a = 1; let b = 2; const c = 3;
a = 11;
b = 22;
c = 33; // a和b不会报错,c这一步会报错
const obj = {};
obj.aa = 1; // 但是如果是对象,增删属性是可以的
var可以声明提前,let和const不能,只能声明后才能使用。 比如:
console.log(a); // 先使用后声明,不会报错,但是输出的是undefined
var a = 1;
console.log(b); // 报错,const和let必须先声明才能使用
const b = 1;
let和const具备块级作用域的效果(块级作用域就是只能在它声明的作用域块有效,外部访问不到)。且不能重复声明。 比如:
function a() {
let aa = 1;
}
console.log(aa); // 访问不到,因为aa只属于方法a的作用域。
var
var是es5版本的变量声明,它可以实现声明提前。
什么是声明提前,比如:
console.log(a); // 这里输出undefined,而非报错:a is not defined
var a = 1;
但它不会把赋值提前,只是这个变量的声明提前了,实际执行的为:
var a;
console.log(a);
a = 1
let
块级作用域
const
const在声明的时候就需要把值进行赋予。
声明
es6有6种声明方式:除了es5中的var和function,还有es6中的let,const,import和class。
另外在块级作用域中尽量不要用函数声明式,建议使用函数表达式,如下:
// 函数声明式
function fn() {}
// 函数表达式
let fn = function () {}
另外浏览器环境和node环境是有区别的,在浏览器环境中,顶层对象是window,在node环境中,顶层对象是global。