您的位置:首页 > 其它

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

2017-03-27 15:30 330 查看
一、ES6声明变量的六种方法

ES5 只有两种声明变量的方法:
var
命令和
function
命令。ES6除了添加
let
const
命令,另外两种声明变量的方法:
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环境避免报错
4000
,应不要在块级作用域里声明函数。

三、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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  阮一峰 es6 let const