当前位置: 首页 > 编程笔记 >

ES6学习笔记之let与const用法实例分析

穆景辉
2023-03-14
本文向大家介绍ES6学习笔记之let与const用法实例分析,包括了ES6学习笔记之let与const用法实例分析的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

 类似资料:
  • 面向新手的 ES6 入门指南,可能是对新手最友好的中文 ES6 教程。本书是作者在学习 ECMAScript 2015(以下均称作 ES6)后整理的学习笔记。

  • 本文向大家介绍vue学习笔记之slot插槽用法实例分析,包括了vue学习笔记之slot插槽用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了vue slot插槽用法。分享给大家供大家参考,具体如下: 不使用插槽,在template中用v-html解析父组件传来的带有标签的content 使用插槽,如果父组件为空,就会显示slot中定义的默认内容 使用插槽添加header和foot

  • 本文向大家介绍JavaScript学习笔记之DOM操作实例分析,包括了JavaScript学习笔记之DOM操作实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript学习笔记之DOM操作。分享给大家供大家参考,具体如下: 一、DOM概念 1. "D":Docment,指的是文档 2. “O”:Object,指的是对象,在javascript有三种对象:用户定义对象、内建

  • 本文向大家介绍ES6学习笔记之新增数据类型实例解析,包括了ES6学习笔记之新增数据类型实例解析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6学习笔记之新增数据类型。分享给大家供大家参考,具体如下: 1、数据解构赋值 1、数组的解构赋值 基本用法:let  [key1,key2...]=[value1,value2...] 注意左右的key与value格式要匹配对应,键值可以缺省,但

  • 本文向大家介绍Android学习笔记之ActionBar Item用法分析,包括了Android学习笔记之ActionBar Item用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android ActionBar Item用法。分享给大家供大家参考,具体如下: 这里主要讲述ActionBar Item的使用方法。在手机上,按Menu键出现Menu菜单,但是在平板中可以把菜单放在

  • 本文向大家介绍Python学习笔记之Break和Continue用法分析,包括了Python学习笔记之Break和Continue用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python学习笔记之Break和Continue用法。分享给大家供大家参考,具体如下: Python 中的Break 和 Continue break:控制何时循环应该结束 continue: 跳过循环的