首页 > 其他 > 详细

ES6中let命令

时间:2020-05-13 18:13:45      阅读:31      评论:0      收藏:0      [点我收藏+]

1.let命令

 es6新增了let命令,用来声明变量。用法类似于var,但其声明的变量只在let命令所在的代码块有效。

1.1let命令的作用域只在当前代码块

示列1

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>let命令作用域</title>
 </head>
 <body>
 </body>

 <script type="text/javascript">
   {
    let a = 10;
    var b = 20;
   }
   console.log(b); // 20
   console.log(a); // ReferenceError: a is not defined
  </script>
</html>

在示列1中,分别用let和var声明一个变量,然后再代码块外打印输出。结果let声明的变量报错,var声明的变量可返回正确的值,说明let只在所在代码块起作用。

1.2使用let声明的变量作用域不会提前

 

var支持“变量提升”,即变量可以在声明前使用,值为underfind。let命令改变了其语法行为,声明的变量一定要声明后才可以使用,否则报错。

示列2:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>let命令作用域</title>
 </head>
 <body>
 </body>

 <script type="text/javascript">
   // var 的情况
   console.log(b); // undefined
   var b = 2;
   // let 情况
   console.log(a); // ReferenceError: a is not defined
   let a = 1;
  </script>
</html>

在示列2中,var声明的变量就发生变量提升,脚本还没运行,变量b就已经存在输出underfined。而用let命令的变量就不会发生变量提升,如果提前用到就会报错。

3.在相同作用域下不能声明相同的变量。

示列3:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>let命令作用域</title>
 </head>
 <body>
  <button onclick="func()">点击1</button>
  <button onclick="func1()">点击2</button>
  <button onclick="func2(‘1‘)">点击3</button>
  <button onclick="func3(‘1‘)">点击4</button>
 </body>
</html>
<script type="text/javascript">
 // Identifier ‘a‘ has already been declared
 function func() {
  let a = 1;
  var a = 1;
 }
 // Identifier ‘a‘ has already been declared
 function func1() {
  let a = 10;
  let a = 1;
 }
 //Identifier ‘args‘ has already been declared
 function func2(args) {
  let args;
 }
    //不报错
 function func3(args) {
  {
   let args;
  }
 }
</script>

 

 

 在示列3中,不能在函数内部重复声明参数,声明的参数也不能与形参同名。如果声明的参数在另外一个作用域下,则可以重复声明。

4.for循环体中let的父字作用域

示列4:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>for循环中let命令</title>
 </head>
 <body>
  <button>点击0</button>
  <button>点击1</button>
  <button>点击2</button>
  <button>点击3</button>
  <button>点击4</button>
 </body>
</html>
<script type="text/javascript">
 var btns = document.querySelectorAll(‘button‘);
 for (var i = 0; i < btns.length; i++) {
        btns[i].onclick = function(){
   console.log("这是点击"+ i);  // 这是点击5
  }
 }
</script>

技术分享图片

在示列4中,不管点击啥,最后打印输出都是点击5,这是为啥呢?因为for是同步操作,而for循环内部的函数执行的是异步操作,当函数找不到I时,便会往上作用域找,所以i的值是5,打印出来的都是“这是点击5”

下面示列5用let命令是如何解决这个问题的:

技术分享图片

 

 

 

ES6中let命令

原文:https://www.cnblogs.com/wzw-gjh/p/12883431.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!