let块级作用域
2016-07-19 17:05
169 查看
let是es6中新加的作用域,即块级作用域。
var申明的变量要么全局,要么函数级,而let允许把变量的作用域限制在块级域中,这里的块级可以是()内,或{}内。
示例:
code_1:
code_2:
code_3:
在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
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
相关文章推荐
- C 语言中通过脚本获取mac地址
- Maven的安装与配置
- 【android学习】通过正则表达式解决数据传输过程中的堆包问题
- 常用的正则表达式总结
- GitHub常用命令
- 最新版 bundler(不是v0.4) 的编译和使用
- 【JAVA基础】基本数据类型
- JavaScript之对象学习
- HDU 4300(KMP)
- U-boot移植——1.时钟
- 最小堆定时器的实现以及与网络编程中的多路IO复用的应用
- android圆形头像的实现类CircleImageView.java
- Insight Properties
- phone 和 pad 兼容 平板 手机 兼容
- devexpress中gridview控件编辑时改变输入法状态
- CSS从大图中抠取小图完整教程(background-position应用)【转】
- MySQL中内存分为全局内存和线程内存
- ExtJs Grid 删除,编辑,查看详细等超链接处理
- 移动无线测试技能树
- W3C下的冒泡和捕获机制