【ES6】let和const命令

参考文档

阮一峰大神:ECMAScript 6 入门

let和const

1.let

let声明的变量只在它所在的代码块有效

不存在变量提升

在声明签使用就会形成暂时性死区

不允许重复声明

2.块级作用域

ES5没有块级作用域带来了很多不合理的场景

1.内层变量会覆盖外层变量

var tmp = new Date();

function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}

f(); // undefined

该处原因在于变量提升所致

2.用来计数的循环变量泄露为全局变量

var s = 'hello';

for (var i = 0; i < s.length; i++) {
  console.log(s[i]);
}

console.log(i); // 5

上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。

let为js新增了块级作用域

es6明确允许在块级作用域中声明函数,但应该避免。如果确实需要就应该携程函数表达式而不是函数声明语句

3.const

const声明一个只读的常量。一旦声明,常量的值就不能改变。(变量所指向的内存地址不变,对简单类型的数据就是值不变

声明就要赋值,否则报错

const的作用域与let命令相同:只在声明所在的块级作用域内有效,存在暂时性死区,不可重复声明

ES6共有6中声明变量的方式:var,function,let,const,import,class

4.顶层对象的属性

在浏览器环境指向window对象,在Node指的是global对象。

ES5之中,顶层对象的属性和全局变量是等价的。

window.a = 1;
a // 1

ES6中,var命令和function命令声明的全局变量依旧是顶层变量,而let、const、class命令声明的全局变量不属于顶层变量。

let b = 1;
window.b // undefined

5.globalThis对象

引入globalThis作为顶层对象

猜你喜欢

转载自www.cnblogs.com/Mijiujs/p/12084160.html