var、let、const

89 阅读1分钟

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中的varfunction,还有es6中的letconstimportclass

另外在块级作用域中尽量不要用函数声明式,建议使用函数表达式,如下:

// 函数声明式
function fn() {}

// 函数表达式
let fn = function () {}

另外浏览器环境和node环境是有区别的,在浏览器环境中,顶层对象是window,在node环境中,顶层对象是global。