let是es6中新加的作用域,即块级作用域。

var申明的变量要么全局,要么函数级,而let允许把变量的作用域限制在块级域中,这里的块级可以是()内,或{}内。

示例:

code_1:

 "use strict";
var a = [];
for(let i=0; i<10; i++){
a[i] = function(){
console.log(i);
}
}
a[6]();//结果为6

code_2:

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

code_3:

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

  在code_2中,由var定义的变量 i 是一个全局变量,每次循环的时候 i 都会被覆盖,而for循环体内的a[i]只是定义了一个函数,函数内部的打印的 i 在使用前还是一个变量,并不是固定的值,循环结束,全局变量 i = 10,所以最后调用a[6]()时打印的结果为10。在code_1中,由let定义的变量 i 在块级作用域内,每次循环时,a[i]函数中的 i 不会再改变,所以循环结束后打印的结果为6。code_3涉及到函数闭包,在网上看到了,就贴一下。

参考:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/let

https://segmentfault.com/q/1010000002466776

最新文章

  1. C# 把日期字符串转换为日期类型 (MM大写为月、小写为分钟)
  2. angularjs不同页面间参数的传递
  3. Laravel 5 多个视图共享数据的方法
  4. MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)
  5. PCA in Bioinformatics
  6. C++学习9 this指针详解
  7. rails 调试
  8. 结合setTimeout和clearTimeout,实现“返回顶部”的功能
  9. WP开发笔记——程序的退出方法
  10. [洛谷1580]yyy loves Easter_Egg I
  11. js_DOM_04
  12. .NET下的加密解密大全(2):对称加密
  13. Font Awesome 4.0.3 字体图标完美兼容IE7
  14. Angularjs学习笔记《一》
  15. 利用GUID唯一标识符并设置它的过期时间
  16. 11 吐司 Toast 代码案例
  17. Docker----起步(2)----在Ubuntu上安装最新版的Docker CE
  18. Codeforces 999D Equalize the Remainders (set使用)
  19. MySQL8.0.11 组复制配置
  20. Ontology Relations

热门文章

  1. 小程序获取access_token
  2. mysql &amp; vs2013
  3. c# assembly
  4. 第112天:javascript中函数预解析和执行阶段
  5. poj3041 Asteroids(二分图最小顶点覆盖、二分图匹配)
  6. 【uoj#207】共价大爷游长沙 随机化+LCT维护子树信息
  7. python打印各种三角形
  8. 洛谷 P3258 [JLOI2014]松鼠的新家
  9. [NOI2016]优秀的拆分 后缀数组
  10. 【bzoj4198】【Noi2015】荷马史诗