你的位置:首页 > 软件开发 > Java > ES6学习笔记

ES6学习笔记

发布时间:2017-08-17 11:00:13
let命令基本用法ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量只能在let代码块中有效。例如:{var a = 1;let b = 2;}console.log(a); //1console.log(b); //Error: a is not de ...

let命令

基本用法

ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量只能在let代码块中有效。

例如:

{var a = 1;let b = 2;}console.log(a); //1console.log(b); //Error: a is not defined

 

不存在变量的提升

let不会像var那样存在变量的提升

var a = [];for(var i = 0;i<10;i++){ var b = i; //ES5的写法 a[i] = function() {  console.log(b); }}a[3](); //9 (这里因为使用了var使得变量提升,循环体满足条件才会跳出循环,所以最后输出结果也是9)
var a = [];for(var i = 0;i<10;i++){ let b = i; //ES6的写法 a[i] = function() {  console.log(b); }}a[3](); //3 (这里为什么会是3呢,因为let只对循环体的内部起作用,它内部的b是影响不到外部的,所以最后输出的是3)

 

暂时性死区

只要块级作用域中存在let命令,它所声明的变量就绑定(binding)在这个区域中,不在受外部的影响。

var a = 10;{ console.log(a); //undefined (作用域内部变量不受外部影响,还有就是let不存在变量提升,所以才会报未定义) let a = 3; console.log(a); //3}

 

不允许有重复声明

let不允许在同一个作用域内,重复声明同一个变量

{ var a = 2; let a = 2; console.log(a)  // Error: Identifier 'a' has already been declared}

 

块级作用域

为什么需要块级作用域?

ES5只用全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景

第一种场景,内层变量可能会覆盖外层变量

var time = new Date();function fun() {console.log(time); if(false) {  var time = 'hello world!'; //这里的time会优先提前,就会覆盖前面的全局变量 }}fun(); //undefined

 

第二种场景,用来计数的循环变量泄漏为全局变量

var t= "Hello world!";for(var i=0; i < string.length;i++){ console.log(t[i]);}console.log('循环结束'); //循环结束console.log(i); //12 (按理说这里循环体已经结束应该释放i中的内存占用,但是变量i中的内存没有释放,如果后面我们还要用到变量i的话就会影响i的值,所以这是很不合理的)

 

const 命令

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

const a = 1;console.log(a); //1a = 2;console.log(a); // TypeError: Assignment to constant variable

 

const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值,不然就会报错。

const n;console.log(n); //SyntaxError: Missing initializer in const declaration

 

const的作用域与let命令相同:只在声明所在的块级作用域内有效;声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用;不允许重复声明。

未完,持续更新中……

原标题:ES6学习笔记

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录