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实例属性和原型属性示例详解
Nov 23 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
举例讲解JavaScript中关于对象操作的相关知识
Nov 16 Javascript
JS 清除字符串数组中,重复元素的实现方法
May 24 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
May 25 Javascript
JavaScript制作颜色反转小游戏
Sep 25 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
Jan 04 Javascript
微信小程序 获取javascript 里的数据
Aug 17 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
Dec 23 Javascript
jquery实现穿梭框功能
Jan 19 jQuery
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
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
了解重排与重绘
2019/05/29 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
python实现文件名批量替换和内容替换
2014/03/20 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
设计总监岗位职责
2013/12/07 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
管理失职检讨书范文
2015/05/05 职场文书
活动经费申请报告
2015/05/15 职场文书
初婚未育证明样本
2015/06/18 职场文书
秋季运动会加油词
2015/07/18 职场文书
团组织关系介绍信
2019/06/24 职场文书
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js