ES6学习

放在开头
这一次项目中担任的是前端开发,然后这个前端的知识,在之前的学习中还是属于ES5和jQuery的内容,所以现在开始学习ES6以及一些现代的框架比如VUE等新的知识,这里就记录一下,对ES6的学习吧。

let 命令

作用域

用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
let,声明的变量仅在块级作用域内有效。

{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

for

对于for循环很有意思,控制条件和循环体不是一个域

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc 

没有变量提升

暂时性死区 TDZ

就是哪怕外面有同名全局变量,但是在内部有let或者const的同名变量,那么在let前不能使用此变量。

typeof不再安全

typeof x; // ReferenceError
let x;

块级作用域

{{todo}}
ES5中的一些东西这里不一样了,比如IIFE,但是具体浏览器或者环境支持的程度不明确。

const

保证一个变量的指向的内存地址不得改动,怎么来理解这句话呢,如果是简单变量比如int,那么就是他就是存在这个地址的,所有不可以改变。但是复杂的数据结构就不一样,等于规定了他只能指向这个结构但是这个结构里面是可以改动的。
所以无法用const使得一个对象变成不可变的。要用freeze。

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

顶层对象

window还是global,全局还是顶层?

ES5中,你不去特意声明,你的全局变量就是顶层对象的属性。