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 相关文章推荐
用js实现的一个Flash滚动轮换显示图片代码生成器
Mar 14 Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 Javascript
更快的异步执行(setTimeout多浏览器)
Aug 12 Javascript
JavaScript对Cookie进行读写操作实例
Jul 25 Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 Javascript
JavaScript设计模式开发中组合模式的使用教程
May 18 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
详解redux异步操作实践
Aug 15 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
Jul 24 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 Javascript
使用vue3重构拼图游戏的实现示例
Jan 25 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
mac下pycharm设置python版本的图文教程
2018/06/13 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python shutil模块用法实例分析
2019/10/02 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
阿德的梦教学反思
2014/02/06 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
2015学校年度工作总结
2015/05/11 职场文书
单位病假条范文
2015/08/17 职场文书