JS闭包一定要返回函数吗
先说结论
不一定
闭包的定义: 闭包的定义满天飞, 每个人有每个人的理解, 也无法说找到一个官方定义.
MDN: 闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包会随着函数的创建而被同时创建。
JS高级程序设计(第4版):闭包是指有权访问另一个函数作用域中的变量函数;
越定义越局限我们的视野, 阻碍我们去理解闭包, 但确实又需要那么一句话去描述闭包, 我谈谈我心中的这一句话: 理解闭包的关键在于, 外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象。
总之, 1.有个外部函数 2.外部函数里有变量 3.同时也有引用这个变量的敦 (管他叫什么, 函数也好, 对象也好, 反正引用到了这个变量的地方), 4.使用了这个 敦 , 那就构成了闭包
所以根据以上理解, 只要使用了这个敦, 这个地方当然可以是一个内部函数, 外部函数中返回一个内部函数, 在调用外部函数的时候就相当于调用了这个内部函数, 固然能叫闭包
1 | function f1(){ |
那不返回呢, 直接在里面调用, 也能叫闭包…
1 | function f1(){ |
又例如呢, 不存在内部函数的情况, 返回的是一个对象… :
1 | function outer(){ |
不是为了设计一个闭包概念才出现的闭包,而是,js这门需要创造出来之后,存在一些天然的规律,总结这些规律成一种特性,这种特性叫啥好呢? 就叫closure(闭包)吧。
所以看完你理解了吗? 没理解的话找其他的文章看看吧.
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.