ES6的介绍和let的使用|-ES6连载1

ECMAScript是什么?

不少人都很困惑,哪怕是工做3至5年前端工程师也困惑,ECMAScript是什么?它跟JavaScript有什么关系?前端

题目:JavaScript由3部分组成,分别是:ECMAScript,BOM和(?)。

从题目中咱们就能够看出来了,ECMAScript是JavaScript的组成部分。程序员

ECMAScript就是JavaScript中的语法规范!ECMAScript是属于国际标准化的语言,全部浏览器开发商都要按照它制定的标准来开发浏览器。开发者也同样,按照它的规定来编程代码。 编程

ECMAScript的做用

  • 语法 – 解析规则,关键字,语句,声明,操做等
  • 类型 – 布尔型,数字,字符串,对象等
  • 原型和继承
  • 内置对象和函数的标准库 – JSON,数字(Math),数组方法,对象内省的方法等等。

了解了ECMAScript以后,那什么是ES6呢?数组

ES6是ECMAScript 6的缩写简称,这个好理解。顾名思义,它是ECMAScript的第6个版本,也就是说它有更早的版本,之后还会有更多版本。

ECMAScript 的历史

  • 1996 年 11 月,Netscape 公司,决定将 JavaScript 提交给国际标准化组织 ECMA。次年,ECMA发布 ECMAScript。这个版本就是 ECMAScript 1.0 版。浏览器

  • 1998 年 6 月,ECMAScript 2.0 版发布。前端工程师

  • 1999 年 12 月,ECMAScript3.0 版发布,成为 JavaScript 的通行标准,获得了普遍支持。ide

  • 2007 年10 月,ECMAScript4.0 版草案发布,对 3.0 版作了大幅升级,可是,以 Yahoo、Microsoft、Google为首的大公司,反对 JavaScript 的大幅升级,主张小幅改动,各方分歧太大,争论过于激进,ECMA 开会决定,停止 ECMAScript 4.0 的开发函数

  • 2009 年 12 月,ECMAScript5.0 版正式发布。code

  • 2015 年 6 月,ECMAScript 6 正式经过,成为国际标准。

ES6 为何受欢迎

  • 确实是这样的,对于不少开发者来讲,ES6带来的新功能涵盖面很广,还有不少很便利的功能等(如:箭头的功能和简单的字符串插值,不懂不要紧,后续陆续介绍),确实使人兴奋。
  • 综合上述ECMAScritpt的介绍,咱们认识到了,要学好JavaScript,就必须先学好ECMAScritpt,并且是最新的版本ECMAScritpt 6。

let 的用途

  • ES6 给开发者带来不少使人激动的特性,其中let关键字就是其中之一。对象

  • 咱们平时在写代码的时候,用var来声明一个变量,除此以外,好像也没用其余的关键字了,无论咱们声明的是字符串类型、数组类型仍是数字类型等,都用一个var 搞点(由于JavaScript拥有动态类型),很方便。但如今,ES6告诉你,除了var,不妨试试用let来声明变量试试看。
  • 咦,这么说,let关键字是用了声明变量的咯?是的,let的用途就是用来声明变量的。
  • 好端端的用var声明就能够了,为何要用新的let关键字来声明啊?难道用var有什么不足的地方吗?是的,还真有。

var 的不足之处一

  • 以下代码
var arr = [ ];
for(var i=0;  i<10;  i++){
    arr [i] = function(){
         alert(i)
    }
}
arr [8](); //结果:10
  • 用let替换var后,咱们再看看:
var arr = [ ];
for(let i=0;  i<10;  i++){
  arr[i] = function(){
    alert(i)
  }
}
arr[8](); //结果:8
  • 由于let声明的变量仅仅在本身的块级做用域起做用,出了这个块级做用域就不起做用。就比如,小明在国内考的“高级程序员”证,去到国外应聘,别人就不认可你的文凭了,小明只能乖乖待在国内持证上岗。而let声明的变量也同样,出不了本身的块级做用域。

那么,什么是块级做用域,怎么才算一个块级做用域?

任何一对花括号(这玩意:{ })中的语句都属于一个块,在花括号里面用let定义的全部变量在花括号外都是不可见的,咱们称之为块级做用域。
  • 代码中,for循环含有有{ },也就是含有了块级做用域,每一个变量 i 都只是在本身的做用域起做用,例如:第10次循环中的 i 的值不会影响到到第9次循环。

  • 若是用var声明的变量,就不是这种状况了,i 的值会影响到各个块里面的 i,等循环完后 i 等于10,全部块的i都变成了10了。这就是为何第一段代码运行后会弹出数字10了,这并非咱们想要的。
  • 就比如小明陆陆续续去了10个国家玩,每到一个国家都给本身弄了一个不一样的身份,可是小明被告知之后只能用在第10个国家取得的那个身份,那么以前9个国家认识小明的朋友都会不认识他的,小明当场就懵逼了。

var 的不足之处二

  • 用var 声明变量的时候会出现“变量提高“的现象
var a = 1;
function show(){
  alert(a);
  var a = 2;
}
show();//结果:undefined
  • 缘由就在于咱们在代码块(函数内)里面还声明并定义了一个变量a,致使变量提高了,实际的代码执行顺序是这样的,仔细看完你就知道什么叫变量提高了。
var a = 1;
function show(){
  var a;
  alert(a);
  var a = 2;
}
show();//结果:undefined
  • 若是你用let这样重写刚刚那段代码的话
var a = 1;
function show(){
  alert(a);
  let a = 2;
}
show();// 结果:报错a is not defined

用let关键字来定义a;这样a在代码块内就不会提高了。

那为何又报错了呢,由于用let声明的变量,在其块级做用域内是封闭的,是不会受到外面的全局变量a影响的,而且要先声明再使用,因此a的值即不是1(由于不受外面的影响),也不是undefined(由于先声明后使用),更不是2,未声明定义就使用,报错。

  • 用let关键字也算是提醒咱们,平时记得先声明定义再使用的好习惯。

let使用注意点

注意1:同一个块级做用域内,不容许重复声明同一个变量。

{
  var a =1;
  let a =2;  //报错,由于a已经用var声明过
}

{
  let a =1;
  let a= 2; //仍是报错,a已经用let声明过。
}

注意2:函数内不能用let从新声明函数的参数

function say(word){
  let word = 'hello Jack';  //报错:用let从新声明word参数
  alert(word)
}
say('hello Lili');

总结

用let声明变量只在块级做用域起做用,适合在for循环使用,也不会出现变量提高现象。同一个代码块内,不可重复声明的相同变量,不可重复声明函数内的参数。

相关文章
相关标签/搜索