ECMAScript 6 入门
本文是阅读了阮一峰大神的《ECMAScript 6 入门》而记下的笔记,纯属学习归纳的笔记,也感谢他的开源做法,这本书讲得很细,如要阅读原文请点击此链接ECMAScript6入门----阮一峰。
ECMAScript: ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准, 使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言
一、 let和const命令:
let和const都是用来申明变量的,作用和JavaScript中的var相差不多。- let命令特点:
(1) 在代码块中用let申明的变量只在该代码块中有效
eg:
'use strict'
function getValue (){
{
let num1 = 1;
var num2 = 2;
}
console.log('num1:' + num1); //有错,num1 is not defined,
console.log('num2: ' + num2);
}
getValue();
//在代码块外部,只能得到num2的值,而num1会被认为没有被定义
(2) let在for循环中申明,那么就只有循环体中有效
(3) 不存在变量提升。变量应该在声明语句之后才可以使用
(4)暂时性死区:只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。“暂时性死区”也意味着typeof不再是一个百分之百安全的操作
(5)不允许重复申明。let不允许在相同作用域内,重复声明同一个变量。
(6)es6的let实际上为 JavaScript 新增了块级作用域。
(7)es6徐云块级作用域的任意嵌套。内层作用域可以定义外层作用域的同名变量。
(8)每一层都是一个单独的作用域,每一层都不可以读取每个独立的作用域中let申明的变量。
(9)块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
typeof x; // ReferenceError
let x;
上面代码中,变量x使用let命令声明,所以在声明之前,都属于x的“死区”,只要用到该变量就会报错。因此,typeof运行时就会抛出一个ReferenceError
避免在块级作用域内声明函数,如果确实需要,也应该写成函数表达式,而不是函数声明语句。
// 块级作用域内部的函数声明语句,建议不要使用
严格模式下,函数只能声明在当前作用域的顶层。
二、const命令:
const声明一个只读的常量。一旦声明,常量的值就不能改变。const一旦声明变量,就必须立即初始化,不能留到以后赋值。
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
const声明的常量,也与let一样不可重复声明。
const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了
const foo = {};
// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123
// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only
上面代码中,常量foo储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。
ES6申明变量的六种方式:
- var
- function
- let
- const
- import
- class
ES6顶层对象的属性:在Node中指的是global对象
在Es5之中,顶层对象的属性与全局变量是等价的。
在es6中,var、funciton命令申明的全局变量依旧是顶层对象的属性。另一方面,规定,let、const、calss命令申明的全局变量不属于顶层对象的属性