2018-01-08

2018-01-09  本文已影响7人  ultimater

你不知道的js上篇

  1. 闭包
    1. 无论通过何种手段将内部函数传递到所在的词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包
    2. 模块就是利用闭包的强大威力
    3. 模块模式具备的两个必要条件
      1. 必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例)
      2. 封闭函数必须返回至少一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态
    4. 现代和未来模块机制,由ES6对于模块系统升级,都是当独立的模块来处理
    5. 当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包
    6. 附录:
      1. 词法作用域是在写代码或者说定义时确定的,而动态作用域是在运行时确定的
      2. 词法作用域关注函数在何处声明,而动态作用域关注函数从何处调用
      3. 块作用域,ES6的出现现在更容易实现
      4. ES6的“=>”箭头函数为this的稳定方式,还可用bind()

总结:闭包在现在写的函数中无处不在,理解作用域词法,引擎的查询,提升形式,加上闭包形成的强大的模块机制,还有ES6更多新的好的东西,在组件或者模块开发上构成了现在的形式,以后也许还会有另外的形式,但这一两年还是这主流的模块开发

上一篇 下一篇

猜你喜欢

热点阅读