1.  let声明变量只在let命令所在的代码区内有效。

1     "use strict";
2          /*如果不加"use strict";会报错:Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode*/
3         {
4
5             let a=10;//let 声明变量,只在let命令所在的代码块内有效。
6             var b=66;
7         }
8         alert(b);
9         alert(a);//Uncaught ReferenceError: a is not defined

2.   

 1 for //循环计数器,很适合使用let命令。
 2
 3         for(let i=0;i<10;i++){
 4             //...
 5         }
 6         console.log(i);//Uncaught ReferenceError: i is not defined
 7         //上面代码中,计数器i只在for循环体内有效,在循环体外引用就会报错。
 8
 9         var a=[];
10         //变量i时var声明的,在全局范围内有效,每次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),这里的i指向的就是全局的i,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮i的值,也就是10.
11         for(var i=0;i<10;i++){
12             a[i]=function(){
13                 console.log(i);
14             };
15         }
16         a[6]();
17
18
19
20         var a=[];
21         for(let i=0;i<10;i++){
22             // 变量i是用let声明的,当前的i只在本轮循环有效,所有每一次循环的i其实都是一个新的变量,所有最后输出是6.每轮循环的变量的i都是重新声明的,JavaScript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就是上一轮循环的基础上进行计算。
23             a[i]=function(){
24                 console.log(i);
25             };
26         }
27         a[6]();//6
28
29
30         //for循环的特别之处,设置循环变量的那一部分是一个父作用域,而循环体内部是一个单独的子作用域。
31         for(let i=0;i<3;i++){
32             let i='abc';
33             console.log(i);//输出三次abc。这表明函数内部的变量i与循环体变量i不在同一个作用域,有各自单独的作用域。
34         }

3.  不存在变量提升。

 1 console.log(foo);//undefined
 2         var foo=2;
 3
 4         console.log(foo);
 5         let foo=2;//Uncaught ReferenceError: foo is not defined
 6
 7         //暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可用的,这在语法上,成为“暂时性死区(temporal dead zone,TDZ)”,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行出现,才可以获取和使用该变量。
 8
 9         //只要块级作用域内存在let命令,它所声明的变量就"绑定"这个区域,不再受外部的影响。
10         var tmp=123;
11         if(true){
12             tmp='abc';
13             let tmp;//Uncaught ReferenceError: tmp is not defined,ES6明确规定,如果在区块中存在let和const命令,这个区块对这些命令声明的变量从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
14         }
15
16         if (true) {
17               // TDZ开始
18               tmp = 'abc'; // ReferenceError
19               console.log(tmp); // ReferenceError
20
21               let tmp; // TDZ结束
22               console.log(tmp); // undefined
23
24               tmp = 123;
25               console.log(tmp); // 123
26             }
27
28         //较隐蔽的暂时性死区。
29         function bar(y = x, x = 2 ) {
30           return [x, y];
31         }
32         bar(); // es6.html:89 Uncaught ReferenceError: x is not defined
33         console.log(bar());
34
35         function bar(x=2,y=x){
36             return [x,y];
37         }
38         bar();
39         console.log(bar());//[2, 2]
40
41         var x=x;//不报错
42
43         let x=x;//es6.html:103 Uncaught ReferenceError: x is not defined

4.  不允许在相同作用域内,重复声明同一个变量

 1     //let不允许在相同作用域内,重复声明同一个变量
 2         //因此,不能再函数内部重新声明参数。
 3
 4         //报错
 5         function(){
 6             let a=10;
 7             var a=1;
 8         }
 9
10         // 报错
11         function(){
12             let a=10;
13             let a=1;
14         }
15
16         function func(arg){
17             let arg;//报错,identifier top has already been declared标识符顶部已被声明
18         }
19         func(4);
20
21         function func(arg){
22             {
23                 let arg;
24                 console.log(arg);//没有报错,undefined
25             }
26         }
27         func(4);

5.  ES6的块级作用域

 1     //ES6的块级作用域
 2         function f1(){
 3             let n=5;
 4             if(true){
 5                 let n=10;
 6             }
 7             console.log(n);//5
 8         }
 9         f1();
10
11
12         //ES5只有全局作用域和函数作用域,没有块级作用域。
13         function f1(){
14             var n=5;
15             if(true){
16                 var n=10;
17             }
18             console.log(n);//10
19         }
20         f1();
21
22         //块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
23         // IIFE 写法
24             (function () {
25               var tmp = ...;
26               ...
27             }());
28
29             // 块级作用域写法
30             {
31               let tmp = ...;
32               ...
33             }
34
35
36             function f() { console.log('I am outside!'); }
37
38             (function () {
39               function f() { console.log('I am inside!'); }
40               if (false) {
41               }
42               f();
43             }());

 

转载于:https://www.cnblogs.com/LinSL/p/7158913.html

ES6_入门(1)_let命令相关推荐

  1. Systemd 入门及常用命令

    目录 Systemd systemd架构 systemd 系统管理 管理系统 查看启动耗时 查看当前主机的信息 Unit 资源 查看当前系统的所有 Unit 查看系统状态和单个 Unit 的状态 Un ...

  2. Systemd入门教程:命令篇

    Systemd入门教程:命令篇 转自:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 作者: 阮一峰 日期: ...

  3. 超详细Redis入门教程——Redis命令(下)

    前言 本文小新为大家带来 超详细Redis入门教程--Redis命令 相关知识,具体内容包括简单动态字符串 SDS,集合的底层实现原理,BitMap 操作命令,HyperLogLog 操作命令,Geo ...

  4. 超详细Redis入门教程——Redis命令(上)

    前言 本文小新为大家带来 超详细Redis入门教程--Redis命令(上) 相关知识,具体内容包括Redis 基本命令,Key 操作命令,String 型 Value 操作命令,Hash 型 Valu ...

  5. Mysql入门教程--基础命令

    Mysql入门教程--基础命令 #mysql ----------------------------------------------------------------------------- ...

  6. walking与Matlab入门教程-ros2命令

    系列文章目录 walking与Matlab入门教程-安装matlab 2022a软件 walking与Matlab入门教程-安装visual studio 2019软件 walking与Matlab入 ...

  7. ES6_入门(2)_const命令

    1. 1 //只读常量,一旦声明,常量的值就不能改变. 2 const PI=3.1415; 3 console.log(PI); 4 PI=6;//报错:es6.html:186 Uncaught ...

  8. Ansible 入门指南 - ansible-playbook 命令

    上篇文章Ansible 入门指南 - 安装及 Ad-Hoc 命令使用介绍的额是 Ad-Hoc 命令方式,本文将介绍 Playbook 方式. Playbook 译为「剧本」,觉得还挺恰当的. play ...

  9. Linux新手入门之基础命令操作

    Linux新手入门 1.Linux基本介绍 1.1.简介 Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux 是一套免 ...

最新文章

  1. 关系数据库设计【笔记】
  2. Python小白学习之函数装饰器
  3. 服务器显示AL024是什么意思,中牟县家具木工机械维修台达驱动器al024故障分分钟修复...
  4. ​EMNLP 2021 最新综述:语言模型中的关系性知识
  5. iOS 相册权限绕过漏洞
  6. Scrum之 Sprint计划会议
  7. 上海电力学院计算机学院怎么样,上海电力学院计算机科学与技术学院在职研究生_上海电力学院在职研究生_在职研究生招生信息网...
  8. PAT乙级1006 换个格式输出整数
  9. raid5需要几块硬盘_Raid5盘阵2块硬盘损坏【热备盘未激活】数据恢复概述
  10. 条件概率与条件概率举例
  11. Linux中用户管理详解(上)-Linux学习日记
  12. 用神经网络实现手写数字识别
  13. ECSHOP二次开发教程__连接
  14. Android开启OTG功能/USB Host API功能
  15. Window串口编程
  16. Excel表格误删怎么恢复
  17. STM32 使用SWD方式下载不了程序
  18. SQL注入回顾篇(四)
  19. 【考研数学】九. 无穷级数
  20. 从火星的古海洋,读懂蓝星的数据湖之变

热门文章

  1. Java 实现三次 for 循环计算水仙花数
  2. 8.2.4临时表和正式表
  3. JavaScript基础学习第四天
  4. 解决 锁定文件失败 打不开磁盘“D:\ubuntu\Ubuntu 64 位.vmdk”或它所依赖的某个快照磁盘。 模块 Disk”启动失败...
  5. jsp中${}解析不了
  6. The python debugger(PDB)的简介
  7. Android 定时器实现的几种方式和removeCallbacks失效问题详解
  8. Android 常用框架集合
  9. [网摘]关于产品运营
  10. DNN架构解析(收集)