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 XML操作 封装类
Jul 01 Javascript
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
工作需要写的一个js拖拽组件
Jul 28 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
Oct 26 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
Jul 18 Javascript
微信小程序 loading(加载中提示框)实例
Oct 28 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
vue自定义过滤器创建和使用方法详解
Nov 06 Javascript
Angular实现的简单查询天气预报功能示例
Dec 27 Javascript
微信小程序实现下拉框功能
Jul 16 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
linux下 C语言对 php 扩展
2008/12/14 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python爬取微信公众号文章的方法
2019/02/26 Python
python中正则表达式与模式匹配
2019/05/07 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python 实现矩阵填充0的例子
2019/11/29 Python
Python-opencv 双线性插值实例
2020/01/17 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
护理自我鉴定范文
2013/10/06 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年人事科工作总结
2014/11/19 职场文书
实习单位指导教师评语
2014/12/30 职场文书
学生保证书格式
2015/02/27 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python