博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再读闭包
阅读量:7040 次
发布时间:2019-06-28

本文共 1061 字,大约阅读时间需要 3 分钟。

前言

每次被问什么是闭包时,有以下答案:

1. 函数内返回一个函数。

2. 可以访问私有变量的函数。

。。。

但是,看着上面的答案,其实我还是一脸懵逼了,以至于再问到闭包在工作中的作用时,我是这么回答的:

其实也没啥吊用。。

其实如果你能真正描述出什么是闭包时,你也能够想到闭包的作用。那么什么是闭包:

闭包是由函数和创建该函数的词法环境组成的。这个词法环境包含了该函数被创建时可以访问的所有局部变量。

还是一脸懵逼?简洁一点就是:

闭包 = 函数 + 该函数可以访问的一个对象。

举个例子:

function parentScope() {    var name = '父亲';    return function() {        console.log(name)    }}var Closures = parentScope();Closures变量是parentScope返回的匿名函数的引用,而这个匿名函数是在parentScope函数内部声明的,可以访问parentScope下的局部变量(name)。所以Closures = 匿名函数 + 匿名函数可以访问的词法环境。所以Closures就是一个闭包。复制代码

知道了什么是闭包,那闭包到底有什么用呢?其实从上面认识闭包可以得出:

1. 通过闭包可以在函数外部访问函数作用域内的局部变量。

那除了这个作用,还有其他作用吗?

实现js的模块化(module pattern)。webpack实现的模块化就是利用了闭包:

// module1.jsfunction (module, module.exports) {    var private = 'jack';    module.exports = {        getPrivate() {            return private;        }    }    return module.exports;}复制代码

webpack通过将我们的业务代码用一个函数包裹,并且传入module.exports对象,使其他模块可以使用这个模块的方法,进而访问到这个模块的私有变量。想一想,我们平时怎么用模块的:

var m = require('module1.js'); // 此时m就是上面导出的module.exports对象m.getPrivate() // 返回module1中的私有变量。复制代码

所以,通过闭包,即实现了私有变量,又可以通过闭包来实现模块化。

转载地址:http://crial.baihongyu.com/

你可能感兴趣的文章
Varnish缓存更新策略调试过程
查看>>
unix bsd linux gun 粗略解释
查看>>
shell中特殊符号的用法
查看>>
我的友情链接
查看>>
上传贴图
查看>>
Spring Cloud各组件重试总结
查看>>
【面试题】C语言:模拟实现内存放置函数memset()
查看>>
桌面虚拟化 | 同VDI扭打,IDV要如何补齐短板?
查看>>
CSS Modules 详解及 React 中实践
查看>>
假如Java被报废,未来将会怎样?
查看>>
Linux命令sed
查看>>
nginx负载均衡应用实例
查看>>
聊聊reactive streams publisher的doOn方法
查看>>
蓝鸥零基础学习HTML5第九讲 兼容性二
查看>>
nginx自定义header头内容丢失
查看>>
配置路由器/交换机的Telnet登录
查看>>
HTTP通俗介绍
查看>>
HttpClient以及Json传递的一些坑
查看>>
loadrunner11压力测试自学成才!嘎嘎
查看>>
Ext.Net系列:二Event之DirectEvent 示例1-调用事件顺序
查看>>