「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

吐槽君

启示

  • 理解闭包可以看做是某种意义上的重生。
  • 掌握闭包将会功力大增。
  • JavaScript中闭包无处不在。
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

实质问题

「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

  • 闭包使得函数可以继续访问定义时的词法作用域。
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

现在我懂了

「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

循环和闭包

  • 在看懂for循环中的闭包问题时,我们首先要知道一点,那就是延迟函数的回调通常是在循环结束的时候才执行,即使setTimeout的第二个参数是0.
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
  • 所以下面的循环回输出5个6
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
  • 尝试通过立即执行函数来解决这个问题
  • 尝试1
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
  • 尝试2
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

重返块作用域

「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

模块

  • 模块模式要具备两个必要条件
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包
  • 通过模块模式可以构造一个API对象
    「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

现代的模块机制

  • 本小节主要讲了模块define的源码,不做深入讨论。

未来的模块机制

  • 关于模块化的内容,请参考这个文档
    ES6—49:模块化

小结

「注解」《你不知道的JavaScript(上卷)》第五章:作用域闭包

回复

我来回复
  • 暂无回复内容