一、ECMAScript 6javascript
javascript组成: ECMAScript、BOM、DOMjava
ES6指的是ECMAScript的版本,2015年6月正式经过数组
二、let命令数据结构
用法相似于var,可是所声明的变量只在let命令所在的代码块内有效函数
var b = new Array()
for (let i = 0; i < 3; i++) { b[i] = i } console.log(i)
报错:Uncaught ReferenceError: i is not definedspa
可是,换成var会正常输出 3指针
js做用域,不像其余大部分语言都是块做用域,它是函数做用域,只有函数里声明的变量才是局部变量,外部不能引用,而if、for等语句块中的变量,从声明开始直至销毁都是全局的。所以,有些地方使用var会以为有点“坑”,增长了let命令以后,至关于给js增长了块级做用域,能够避免code
var a = new Array() for(var i=0;i<6;i++){ a[i] = function(){ console.log(i) } } a[3](); //输出 6
上述代码中,i使用var声明的,而且是在语句块中,因此它是全局变量,每一次循环,变量的i值都会发生改变,而循环内的i指向的也是全局变量i,而执完循环体后,i的值为6,因此最后console.log(i)的输出也是6 对象
var a = new Array() for(let i=0;i<6;i++){ a[i] = function(){ console.log(i) } } a[3]() //输出3
上述代码惟一的区别就是,i使用let声明。因为i是在块内起做用,也就是本次的循环中有效,因此每一次循环都会开辟一个新的地址存放,而且,js引擎会记住上一次的值,初始化本轮的变量i时,就会使用上一次i的值。因此最终输出的是 3blog
let无变量提高,也就是必须先声明再使用,不然会报错。ES6规定,若是区块中存在let和const命令,这个区块对这些命令声明的变量从一开始就造成了封闭做用域。
let不容许在相同做用域内,重复声明同一个变量
三、const命令
const声明一个只读的常量。一旦声明,常量的值就不能改变。其本质是变量指向的地址不容许改动,针对数字、字符串、布尔值,值就保存在变量指向的内存地址,所以等同于常量,但对于复合类型的数据,主要是对象和数组,变量指向的内存地址是指针,其数据结构能够变。因此将对象或数组声明为const须要注意,其内容不必定是不变的。
const a; a = 11; console.log(a)
//输出报错 Uncaught SyntaxError: Missing initializer in const declaration
const常量,声明后必须赋值,而且对于简单的数据类型是不能够更改,但对于复杂数据类型,能够增减内容,可是不能改变地址
const a = 11; a = 12; console.log(a) //Uncaught TypeError: Assignment to constant variable. const b = {m:33} b.n = 22 console.log(b) // {m: 33, n: 22}
const c = [1,2,3,4];
let b = [1,2,3,4];
c = b;
console.log(c)
// Uncaught TypeError: Assignment to constant variable.