简述ES6新增关键字let与var的区别


Posted in Javascript onAugust 23, 2019

最近看了很多文章,偶然间看到ES6中新增了一个关键字 let ,它具有与 var 关键字相似的功能。一开始使用它时,发现它让我对之前一些习以为常的东西产生了怀疑。

下面先让我们看看它和 var 之间用法的不同

 {
 var a = 10;

 let b = 8;
 }
  a //10 
  b // Referenceerror :b is not defined

上面在代码块中声明了两个变量并分别赋值输出到控制台,结果a的变量成功输出,b的输出结果产生了报错。可见,let声明的变量只在它所在的代码块中产生作用。同时,我们也能想到它最好的使用方法就是在for循环中使用。

下面我们再举个例子来观察它与 var 之间的区别:

 var a = [ ]
for(var i = 0;i<6; i++){


a[i] = function(){



console.log(i);


}

}

console.log("i的值:",i);

a[ 4 ]( );

它的输出结果为:

i 的值:6

6

为什么是 6 呢?一开始我也被吓懵逼了,这有悖于我的常识,以往没注意到的地方,居然这么的low。在我的意识里结果应该 4,而不是 6 。我想了很久也想不明白,以我这种小白的技术,自然是很难搞懂这种资深技术宅的问题。所以,我查了很多资料来解决这个问题,才搞明白。

在for里用 var 声明的 i 是全局变量,在循环外部也可以访问到,在循环体内每次循环都给 i 重新赋一次值,而 i 却是属于全局的,外部的 i 值最终是 6 ,数组 a[ ]指向的 i 始终都是同一个 i,当循环结束时 a [ ] 函数内部的 i 就是最终 i 的结果  6。

如果使用let,声明的变量只在当前代码块中起作用

var a = [ ]

for(let i = 0;i<6; i++){


a[i] = function(){



console.log(i);


}

}

console.log("i的值:",i);

a[ 4 ]( );

 它的输出结果为:

 

i 的值:6

5

上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是5。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

总结

以上所述是小编给大家介绍的ES6新增关键字let与var的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
无阻塞加载脚本分析[全]
Jan 20 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
Jun 24 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
JS留言功能的简单实现案例(推荐)
Jun 23 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
Oct 26 Javascript
快速解决vue-cli在ie9+中无效的问题
Sep 04 Javascript
JavaScript中引用vs复制示例详析
Dec 06 Javascript
vue实现随机验证码功能(完整代码)
Dec 10 Javascript
TypeScript 运行时类型检查补充工具
Sep 28 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 Javascript
VueCli生产环境打包部署跨域失败的解决
Nov 13 Javascript
微信小程序后台持续定位功能使用详解
Aug 23 #Javascript
详解基于Vue/React项目的移动端适配方案
Aug 23 #Javascript
详解vue-video-player使用心得(兼容m3u8)
Aug 23 #Javascript
使用vue实现多规格选择实例(SKU)
Aug 23 #Javascript
jquery分页优化操作实例分析
Aug 23 #jQuery
jquery实现的分页显示功能示例
Aug 23 #jQuery
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
Aug 22 #Javascript
You might like
优化PHP程序的方法小结
2012/02/23 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
python中__call__内置函数用法实例
2015/06/04 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python直接访问私有属性的简单方法
2016/07/25 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
SQL语言面试题
2013/08/27 面试题
毕业生的自我评价分享
2013/12/18 职场文书
测试工程师职业规划书
2014/02/06 职场文书
质量承诺书范文
2014/03/27 职场文书
说明书格式及范文
2014/05/07 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
换届选举主持词
2015/07/03 职场文书
放假通知怎么写
2015/08/18 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
PHP新手指南
2021/04/01 PHP
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python