学习日志-社区-forlet 学习笔记

154 阅读2分钟

前言

本文记录了社区(掘金/csdn/知乎/StackOverflow)学习-forlet 学习的所有笔记。

  1. juejin.cn/post/688002…
  2. let也可是实现对i的存储;ES6中for循环的let有个特殊的行为;使用let声明的i,不会只声明一次,每次迭代都会声明,而且会自动记住上次迭代后的i值来重新初始化,每次i不重复;也就是每次迭代都会形成一个块级作用域来供延迟函数访问,这样块作用域与闭包完美结合;let简直为for循环量身定制的;终于可以愉快地写代码了
  3. 另外for括号中let声明的i与{}中不属于同一个块;也就是说{}作为子作用域,也可以声明i;父子作用域互不影响
  4. juejin.cn/post/689969…
  1. 不考虑for循环内部生成的其他作用域,通过let在for循环中初始化变量时会产生三类作用域,按从外而内的关系表示为 outer for inner,在上述代码中会产生 n 个相互独立的 inner 作用域。在 for 中的通过let初始化的变量(i),会以类似传递函数参数的形式被 inner 中代码使用,在一次 inner 中代码执行完成后,若传入的变量被改变,会将改变后的值重新赋值给 for 中的变量(i)。
  2. 可以用debugger命令来进行验证
  3. 262.ecma-international.org/6.0/#sec-fo…
  4. the running execution context:运行时执行上下文,当程序运行,进入到某段代码块时,一个新的执行上下文被创建,并被放入一个 stack 中。当程序运行到这段代码块结尾后,对应的执行上下文被弹出 stack,就是运行时执行上下文。一般包括Lexical Environments(词法环境)和VariableEnvironment (可变环境)
  5. LexicalEnvironment:词法环境,记录 let、const 的声明。一般包括Environment Record(环境记录)和Reference to an outer Lexical Environment(外部 lexical environment 的引用)
  6. VariableEnvironment:可变环境,记录var 声明的变量,也是LexicalEnvironment的实例
  7. Environment Record:环境记录,存储变量,函数等声明的实际映射,一般包括:Declarative environment record(声明性环境记录) ,  Object environment record(对象环境记录),Global Environment Records(全局环境记录)
  8. Declarative environment record:声明性环境记录,存储变量,函数,常量,类,模块声明
  9. Object environment record:对象环境记录,存储对象声明
  10. Global Environment Records:全局环境记录,存储全局变量,全局对象的属性以及脚本出现的所有顶级声明