V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wei771783057  ›  全部回复第 1 页 / 共 1 页
回复总数  3
2020-10-12 05:51:31 +08:00
回复了 zxCoder 创建的主题 JavaScript 闭包为什么叫闭包
@codingguy 这个帖子写得很好
2020-10-07 17:21:36 +08:00
回复了 zxCoder 创建的主题 JavaScript 闭包为什么叫闭包
严格意义上讲,闭包只有一条定义就是 函数引用了外部变量 。
所以其实你平常普通函数只要引用了全局变量就形成闭包了,只不过这是全局层面的,
而一般的形式是 1,一个包裹函数内的函数引用了这个包裹函数内部词法作用域它自身外的变量,如果在包裹函数内这个函数直接就运行了,那就是形成了调用执行栈,然后执行完立马出栈 等垃圾回收 GC 后引用的变量内存就清理掉了,2,但我们一般狭义上闭包指的是包裹函数把这个内部函数返回赋给其他变量,但由于这个内部函数它引用了包裹内它自身外部作用域变量,导致在执行栈依次进出后,被引用的包裹内部变量无法被 GC,这就形成了所谓闭包。
一般作用
1,形成内部私有变量,无法被直接访问,必须通过引用它的内部函数获取,可以进行一系列读写访问控制。
2,制作偏函数,比如 bind,可以接受一些预设参数值,返回一个会用到它们的函数,还有类似的像柯里化,将一个接受多个参数的函数转换成接受单一参数并返回一个接收剩余参数返回结果的函数。
3,高阶函数,像组合函数 compose,把函数作为参数传入,内部实现其调用形式返回结果,还有像制作防抖节流函数也都是闭包的应用 都是通过预设的参数作为闭包变量返回一个引用它的函数来实现的功能。
另外 class 类私有字段还在 tc39 提案中,不过 class 还是不太受待见,毕竟只是 prototype 的语法糖而且并不完备,js 社区感觉还是更偏向 FP 一些,,,
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2379 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 01:02 · PVG 09:02 · LAX 17:02 · JFK 20:02
Developed with CodeLauncher
♥ Do have faith in what you're doing.