当前位置: 首页 > news >正文

关于 es6的 let 特性在 for 循环结构 的个人理解

文章摘抄自https://www.jianshu.com/p/8f890da2d8bc

1:var a=[];

for(var i=0;i<10;i++){

a[i]=function(){console.log(i);};

}

a[6]();//10

 

2  :var a=[];

for(let i=0;i<10;i++){

a[i]=function(){console.log(i);};

}

a[6]();// 6

let 声明的变量只在 块级作用域内有效,so 上面的 let 代码块,可以这么理解:

for循环里的 ()和 { } 合起来是 一个大的块级作用域,并且()是父级作用域,{ }是个单独的子级作用域,每次循环会创建一个新的【()和 { }】 合起来的一个大的块级作用域状态,所以每次 i 的值都对应一个新的大的块级作用域的状态,大的块级作用域的状态下的 { } 子级作用域之间是相互独立的,并且每次()父级作用域会记住上次循环的父级作用域内的循环变量的值,然后基于此值计算本次循环变量的值,以此类推,直至循环结束。

函数在调用的时候,会去函数定义的地方沿着作用域链向上以类似DOM树的冒泡的方式查找变量的值:(以下的父级函数作用域都是在 如果有的情况下 发生)

    var的情况是: 子级函数作用域-> 父级函数作用域->全局作用域;

    let的情况是:子级函数作用域->块级作用域[{子 } -> (父)]->父级函数作用域->全局作用域;

    let的情况类似之前的闭包:子级函数作用域->父级函数作用域->全局作用域;


别人总结的太好了

转载于:https://www.cnblogs.com/xufeng1994/p/10473271.html

相关文章:

  • 蚂蚁数据分析平台的演进及数据分析方法的应用
  • 从第一行代码开始开发区块链(二)
  • 函数组件与类有什么不同?
  • 通过find文件并对大小求和统计目录大小
  • elasticsearch 占CPU过高
  • Windows本地代码仓库使用连接教程
  • Redis 安装加集群配置
  • 带你快速了解ES1D-E361T
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • dependencies与devDependencies的区别
  • ale.js2.0 更新计划正式发布
  • 代码管理podfile.lock报错
  • 2019年3月11日 [950] Reveal Cards In Increasing Order
  • bzoj2395 [Balkan 2011]Timeismoney(最小乘积生成树+计算几何)
  • UAV心跳机制与容器、进程数据采集
  • 《剑指offer》分解让复杂问题更简单
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ERLANG 网工修炼笔记 ---- UDP
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript-Array类型
  • MySQL主从复制读写分离及奇怪的问题
  • Protobuf3语言指南
  • 阿里云应用高可用服务公测发布
  • 创建一个Struts2项目maven 方式
  • 代理模式
  • 警报:线上事故之CountDownLatch的威力
  • 前端临床手札——文件上传
  • 深度学习入门:10门免费线上课程推荐
  • 算法之不定期更新(一)(2018-04-12)
  • 听说你叫Java(二)–Servlet请求
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #AngularJS#$sce.trustAsResourceUrl
  • (LeetCode 49)Anagrams
  • (Note)C++中的继承方式
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (一)Linux+Windows下安装ffmpeg
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)linux 命令大全
  • (转)四层和七层负载均衡的区别
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .md即markdown文件的基本常用编写语法
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Project Open Day(2011.11.13)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .so文件(linux系统)
  • @EnableAsync和@Async开始异步任务支持
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [android] 看博客学习hashCode()和equals()
  • [android] 手机卫士黑名单功能(ListView优化)
  • [BJDCTF 2020]easy_md5
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)