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 相关文章推荐
json 入门基础教程 推荐
Oct 31 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
Jun 09 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
Oct 16 Javascript
jquery+javascript编写国籍控件
Feb 12 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
Feb 16 Javascript
jquery ajax局部加载方法详解(实现代码)
May 12 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
详解PHP中pathinfo()函数导致的安全问题
Jan 05 Javascript
Ajax获取node服务器数据的完整步骤
Sep 20 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 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
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
php在window iis的莫名问题的测试方法
2013/05/14 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
海量经典的jQuery插件集合
2010/01/12 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
python ansible服务及剧本编写
2017/12/29 Python
Python之list对应元素求和的方法
2018/06/28 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
浅谈Python中的字符串
2020/06/10 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
工业学校毕业生自荐信范文
2014/01/03 职场文书
护士个人自我鉴定
2014/03/24 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
工作目标责任书
2014/07/23 职场文书
大学教师个人总结
2015/02/10 职场文书
升职自我推荐信范文
2015/03/25 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
sql注入报错之注入原理实例解析
2022/06/10 MySQL