ES6学习笔记(一)(整理阮一峰大神入门)

一、ES6声明变量的六种方法

ES5 只有两种声明变量的方法:var命令和function命令。ES6除了添加letconst命令,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有6种声明变量的方法。

1、let变量在代码块中有效。比如用for循环计数器,就很适合用let变量。

2、var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。

3、typeof将不再安全。在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。“暂时性死区”也意味着typeof不再是一个百分之百安全的操作。变量x使用let命令声明,所以在声明之前,都属于x的“死区”,只要用到该变量就会报错。因此,typeof运行时就会抛出一个ReferenceError


二、块级作用域

1、es5和es6比较:es5 只有全局作用域和函数作用域,没有块级作用域。

2、let实际上为javascript新增了块级作用域

3、es6 允许块级作用域的任意嵌套。

4、es5规定函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明,严格模式下会报错。为ES5和es6环境避免报错,应不要在块级作用域里声明函数。


三、const命令

1、const声明一个只读的常量。一旦声明,常量的值就不能改变。

2、const的作用域与let命令相同:只在声明所在的块级作用域内有效。

3、const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用

4、对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only








你可能感兴趣的:(JS情缘)