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 相关文章推荐
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
js constructor的实际作用分析
Nov 15 Javascript
jQuery实现带延迟效果的滑动菜单代码
Sep 02 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
JS中位置与大小的获取方法
Nov 22 Javascript
BootStrap Fileinput的使用教程
Dec 30 Javascript
js使用html2canvas实现屏幕截取的示例代码
Aug 28 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
JavaScript Tab菜单实现过程解析
May 13 Javascript
vue 数据操作相关总结
Dec 17 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
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
在普通HTTP上安全地传输密码
2007/07/21 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
vue el-table实现自定义表头
2019/12/11 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python的id()函数介绍
2013/02/10 Python
python和C语言混合编程实例
2014/06/04 Python
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Django forms组件的使用教程
2018/10/08 Python
Python循环结构的应用场景详解
2019/07/11 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
露营世界:Camping World
2017/02/02 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
医药销售求职信范文
2014/02/01 职场文书
公司新年寄语
2014/04/04 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
分公司经理任命书
2014/06/05 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
离婚协议书格式
2014/11/21 职场文书
给医院的感谢信
2015/01/21 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书