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

for (let i = 0; i < 10; i++) {console.log(i);}

可以执行

for (let i = 0; i < 10; i++) {}console.log(i);

就会报错

ncaught ReferenceError: i is not definedat <anonymous>:3:13at Object.InjectedScript._evaluateOn (<anonymous>:145:167)at Object.InjectedScript._evaluateAndWrap (<anonymous>:137:25)at Object.InjectedScript.evaluate (<anonymous>:118:14)

let var使用区别:

var:

var a = [];
for (var i = 0; i < 10; i++) {a[i] = function () {console.log(i);};
}
a[6]();

结果:

10

变量ivar声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组afunction在运行时,会通过闭包读到这同一个变量i,导致最后输出的是最后一轮的i的值,也就是10。

let:

var a = [];
for (let i = 0; i < 10; i++) {a[i] = function () {console.log(i);};
}
a[6]();

结果:

6

变量ilet声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。

for循环还有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。

不存在变量升级:

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
VM171:2 undefined

报错:

VM171:6 Uncaught ReferenceError: bar is not definedat <anonymous>:6:13at Object.InjectedScript._evaluateOn (<anonymous>:145:167)at Object.InjectedScript._evaluateAndWrap (<anonymous>:137:25)at Object.InjectedScript.evaluate (<anonymous>:118:14)(anonymous function) @ VM171:6InjectedScript._evaluateOn @ VM68:145InjectedScript._evaluateAndWrap @ VM68:137InjectedScript.evaluate @ VM68:118

ECMAScript 6 -- let和const命令相关推荐

  1. 阮一峰 《ECMAScript 6 入门》:let 和 const 命令

    以下内容全文出自 阮一峰的书: <ECMAScript 6 入门> 电子版地址:ES 6标准入门(第3版) let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于v ...

  2. ECMAScript 6 之 let 和 const 命令

    1.let基本用法 1.1.声明变量 let声明的变量只在它所在的代码块有效. 1.2.不存在变量提升 var命令会发生"变量提升"现象,即变量可以在声明之前使用,值为undefi ...

  3. ES6之let(理解闭包)和const命令

    ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...

  4. 【面试题】【ES6】let和const命令 (面试必看)

    给大家推荐一个实用面试题库 1.前端面试题库 (面试必备)            推荐:★★★★★ 地址:前端面试题库 1.let命令 基本用法 用法类似于var,但是所声明的变量,只在let命令所在 ...

  5. js中的const 命令

    js中的const 命令 一直以来我在我字典里认为const 命令就是用来声明一个常量,然后并非如此,这也是我在工作中偶然发现的,然后查了下文档才得知,记录在档,以供参考: const 定义 cons ...

  6. ES6 let和const 命令

    ES6 let 和 const 命令 1. 变量声明 2. 变量提升问题 3. 暂时性死区(TDZ) 4. 块级作用域 4.1 为什么需要块级作用域? 4.2 ES6的块级作用域 4.3 块级作用域和 ...

  7. let const 命令

    一.let命令 用于声明变量. 1) 所声明的变量只在let命令所在代码块内有效.(块级作用域) {let a=10;var b=1; } a // ReferenceError: a is not ...

  8. 2.let和const命令

    1.let命令 let声明的变量,只在let命令所在的代码块内有效. {let a = 10;var b = 1; }a // ReferenceError: a is not defined. b ...

  9. ES6-let和const命令

    let 1.ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 2.不存在变量提升 var命令会发生"变量提升"现象 ...

最新文章

  1. 【转载】tf.nn.conv2d_transpose是怎样实现反卷积的?
  2. ***和******
  3. 【赠书】深入浅出embedding:原理解析与应用实践
  4. cocos2d-x android 环境搭配,cocos2d-x Android环境配置问题和解决方法
  5. java访问登录网页_===java怎样访问需要登录才能查看的网页????急!!===...
  6. 矩阵运算_Eigen使用_旋转矩阵/角轴/欧拉角/四元数相互转换
  7. opencv怎么2个摄像头_内脏脂肪过高怎么办?从2个方法入手,坚持3个月甩掉小肚腩...
  8. 【办公自动化】国土“三调”用地分类“一键”转国标分类
  9. PCIe简介及引脚定义
  10. 孵出鸡蛋然后拿去卖钱
  11. Delphi 10.3.1 TNetHttpClient在多线程中存在的问题及解决方法。
  12. 菜的抠脚团队正式成立
  13. git公钥生成以及日常操作
  14. _findnext()报错写入位置 0x000000000BE2A940 时发生访问冲突。
  15. HPE矛头直指思科 与Arista达成软件定义合作关系及销售协议
  16. php 查询数据表第2条,PHP 连接 MySQL 数据库的连接函数 mysql_connect 的第二个参数是( )。...
  17. 软件开发php代码规范,php开发规范_PHP代码编写规范
  18. 批量自动下单(1688)
  19. 微信登录不能回调WXEntryActivity的解决
  20. 计算机主机启动不了系统安装系统安装软件,开不了机怎么用u盘重装系统

热门文章

  1. 理解Caffe的网络模型
  2. Github(2)-本地配置git
  3. 《Python Cookbook 3rd》笔记(1.5):实现一个优先级队列
  4. redis 缓存过期默认时间_redis缓存过期机制
  5. 该工程中的宏被禁止_建筑劳务分包都能承担什么工程
  6. 密码学专题 序列号文件
  7. codeforces 734A-C语言解题报告
  8. YUV测试序列下载地址
  9. 路由器和交换机的区别详解
  10. 解决:ClassNotFoundException: com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect