ES6学习笔记之let与const用法实例分析


Posted in Javascript onJanuary 22, 2020

本文实例讲述了ES6学习笔记之let与const用法。分享给大家供大家参考,具体如下:

在ES6中不是var,而是通过let来声明变量,用const来声明常量,有如下一些不同:

1、let与const作用域只限于当前代码块{},而var则没有这种限制。

2、使用let、const申明的变量作用域不会被提升。例如:

console.log(str);
var str="var declare";

控制台输出undefined;因为变量申明是在任意代码执行前处理的,在代码区中任意地方声明变量和在最开始(最上面)的地方声明是一样的。也就是说,看起来一个变量可以在声明之前被使用!这种行为就是所谓的“hoisting”,也就是变量提升,看起来就像变量的声明被自动移动到了函数或全局代码的最顶上。注意:仅仅是声明提升了,定义并不会被提升。因此console.log()可以检测到str的声明,但是却没有定义,提示undefined。

console.log(str2);
let str2="let declare";

控制台报错:can't access lexical declaration `str2' before initialization,let不会把声明提升到全局之前,因此在console输出str2时会报错未声明。

3、在相同的作用域下不能申明相同的变量,利用var可以声明两次同一个变量,并且后一个会覆盖前面的声明,而let、const不可以。

4、for循环体现let的父子作用域

var btns=document.querySelectorAll('button');
for (var i=0;i<btns.length;i++){
  btns[i].οnclick=function () {
    alert("第"+i+"个按钮");
  }
}

由于var会提升作用域,当btns[i]在本代码块{}找不到i时,会找到之前的for中的i。在函数循环执行时,并没有触发onclick,i一直++到5。当任意按钮点击的时侯触发onclick,此时i==5,因此无论按那个按钮都会显示“第5个按钮”。

解决方法一:闭包处理      

var btns=document.querySelectorAll('button');
for (var i=0;i<btns.length;i++){
  (function (i) {//通过参数传递i,在另一个函数内的i
    btns[i++].οnclick=function () {
      alert("第"+i+"个按钮");
    }
  })(i);
}

闭包处理:闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量,i是另一个函数作用域内的变量,不会随着外循环而改变。

方法二:使用let的情况下,会自己区分为两个作用域,每个btns[i]内的函数对应不同的变量i

for (let i=0;i<btns.length;i++){//内部为新的let作用域
  btns[i].οnclick=function (){
    alert("第"+i+"个按钮");
  }
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
获取网站跟路径的javascript代码(站点及虚拟目录)
Oct 20 Javascript
jQuery Validation插件remote验证方式的Bug解决
Jul 01 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
最简单的JavaScript图片轮播代码(两种方法)
Dec 18 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
Sep 05 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
Jan 04 Javascript
Array数组对象中的forEach、map、filter及reduce详析
Aug 02 Javascript
js监听html页面的上下滚动事件方法
Sep 11 Javascript
Node.js+Express+Mysql 实现增删改查
Apr 03 Javascript
微信小程序合法域名配置方法
May 06 Javascript
小程序跳转H5页面的方法步骤
Mar 06 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
Jan 22 #Javascript
Vue设置长时间未操作登录自动到期返回登录页
Jan 22 #Javascript
JavaScript设计模型Iterator实例解析
Jan 22 #Javascript
Vue开发环境跨域访问问题
Jan 22 #Javascript
vue中英文切换实例代码
Jan 21 #Javascript
微信小程序点击view动态添加样式过程解析
Jan 21 #Javascript
微信小程序如何实现radio单选框单击打勾和取消
Jan 21 #Javascript
You might like
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
js操作二级联动实现代码
2010/07/27 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python中pygame模块用法实例
2014/10/09 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
德国高尔夫商店:Par71.de
2020/11/29 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
迟到检讨书300字
2014/02/14 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
应届毕业生求职信
2014/05/26 职场文书
催款通知书范文
2015/04/17 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
中学教代会开幕词
2016/03/04 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android