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 相关文章推荐
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
Apr 12 Javascript
js实现iframe动态调整高度的代码
Jan 06 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
Oct 24 Javascript
js如何获取file控件的完整路径具体实现代码
May 15 Javascript
利用CSS3在Angular中实现动画
Jan 15 Javascript
jQuery遮罩层实例讲解
May 11 jQuery
Underscore之Array_动力节点Java学院整理
Jul 10 Javascript
详解express与koa中间件模式对比
Aug 07 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 Javascript
微信小程序实现菜单左右联动
May 19 Javascript
JS实现前端路由功能示例【原生路由】
May 29 Javascript
JS猜数字游戏实例讲解
Jun 30 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
如何开始收听短波广播
2021/03/01 无线电
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
js倒计时抢购实例
2015/12/20 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
js模拟F11页面全屏显示
2019/09/17 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
python reduce 函数使用详解
2017/12/05 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
实习教师自我鉴定
2013/12/12 职场文书
教师校本培训方案
2014/02/26 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
佛光寺导游词
2015/02/10 职场文书