这篇文章给大家分享的是有关ES6中let怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
很多人都很困惑,哪怕是工作3至5年前端工程师也困惑,ECMAScript是什么?它跟JavaScript有什么关系?
题目:JavaScript由3部分组成,分别是:ECMAScript,BOM和(?)。
从题目中我们就可以看出来了,ECMAScript是JavaScript的组成部分。
ECMAScript就是JavaScript中的语法规范!ECMAScript是属于国际标准化的语言,所有浏览器开发商都要按照它制定的标准来开发浏览器。开发者也一样,按照它的规定来编程代码。
语法 – 解析规则,关键字,语句,声明,操作等
类型 – 布尔型,数字,字符串,对象等
原型和继承
内置对象和函数的标准库 – JSON,数字(Math),数组方法,对象内省的方法等等。
了解了ECMAScript之后,那什么是ES6呢?
ES6是ECMAScript 6的缩写简称,这个好理解。顾名思义,它是ECMAScript的第6个版本,也就是说它有更早的版本,以后还会有更多版本。
1996 年 11 月,Netscape 公司,决定将 JavaScript 提交给国际标准化组织 ECMA。次年,ECMA发布 ECMAScript。这个版本就是 ECMAScript 1.0 版。
1998 年 6 月,ECMAScript 2.0 版发布。
1999 年 12 月,ECMAScript3.0 版发布,成为 JavaScript 的通行标准,得到了广泛支持。
2007 年10 月,ECMAScript4.0 版草案发布,对 3.0 版做了大幅升级,但是,以 Yahoo、Microsoft、Google为首的大公司,反对 JavaScript 的大幅升级,主张小幅改动,各方分歧太大,争论过于激进,ECMA 开会决定,中止 ECMAScript 4.0 的开发
2009 年 12 月,ECMAScript5.0 版正式发布。
2015 年 6 月,ECMAScript 6 正式通过,成为国际标准。
确实是这样的,对于很多开发者来说,ES6带来的新功能涵盖面很广,还有很多很便利的功能等(如:箭头的功能和简单的字符串插值,不懂没关系,后续陆续介绍),确实令人兴奋。
综合上述ECMAScritpt的介绍,我们认识到了,要学好JavaScript,就必须先学好ECMAScritpt,而且是最新的版本ECMAScritpt 6。
ES6 给开发者带来很多令人激动的特性,其中let关键字就是其中之一。
我们平时在写代码的时候,用var来声明一个变量,除此之外,好像也没用其他的关键字了,不管我们声明的是字符串类型、数组类型还是数字类型等,都用一个var 搞点(因为JavaScript拥有动态类型),很方便。但现在,ES6告诉你,除了var,不妨试试用let来声明变量试试看。
咦,这么说,let关键字是用了声明变量的咯?是的,let的用途就是用来声明变量的。
好端端的用var声明就可以了,为什么要用新的let关键字来声明啊?难道用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 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关键字也算是提醒我们,平时记得先声明定义再使用的好习惯。
{ var a =1; let a =2; //报错,因为a已经用var声明过 } { let a =1; let a= 2; //还是报错,a已经用let声明过。 }
function say(word){ let word = 'hello Jack'; //报错:用let重新声明word参数 alert(word) } say('hello Lili');
感谢各位的阅读!关于“ES6中let怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。