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字符串对象的常用方法简明版
Jun 26 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
使用命令对象代替switch语句的写法示例
Feb 28 Javascript
javascript比较两个日期相差天数的方法
Jul 23 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
Javascript函数中的arguments.callee用法实例分析
Sep 16 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
node前端模板引擎Jade之标签的基本写法
May 11 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
May 01 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四舍五入精确小数位及取整
2014/01/14 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
python实现将内容分行输出
2015/11/05 Python
Python 装饰器深入理解
2017/03/16 Python
Python元字符的用法实例解析
2018/01/17 Python
python默认参数调用方法解析
2020/02/09 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
Python几种常见算法汇总
2020/06/02 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
医院搬迁方案
2014/06/14 职场文书
地心历险记观后感
2015/06/15 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书