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