JavaScript闭包的应用以及缺点

网友投稿 277 2022-09-06

JavaScript闭包的应用以及缺点

文章目录

​​闭包的应用 -- 自定义JS模块​​​​闭包的缺点以及解决​​​​闭包的面试题​​

闭包的应用 – 自定义JS模块

JS模块的本质就是js文件

我们可以将所有的数据和功能都封装在一个函数内部(私有的),只向外暴露一个包含n个方法的对象或函数(一个容器),模块的使用者, 只需要通过模块暴露的对象调用方法来实现对应的功能即可

实现一:

通过return一个容器来进行暴露。

模块:

function myModule() { //私有数据 var msg = 'My NEFU' //操作数据的函数 function doSomething() { console.log('doSomething() '+msg.toUpperCase()) } function doOtherthing () { console.log('doOtherthing() '+msg.toLowerCase()) } //向外暴露对象(给外部使用的方法) return { doSomething: doSomething, doOtherthing: doOtherthing }}

使用端:

实现二:

通过立即执行函数,将方法变成为window的属性,使用的时候可以省略window

模块:

(function () { //私有数据 var msg = 'My NEFU' //操作数据的函数 function doSomething() { console.log('doSomething() '+msg.toUpperCase()) } function doOtherthing () { console.log('doOtherthing() '+msg.toLowerCase()) } //向外暴露对象(给外部使用的方法) window.myModule2 = { doSomething: doSomething, doOtherthing: doOtherthing }})()

使用端:

注: 将模块的代码这样写更好:

(function (window) { //私有数据 var msg = 'My NEFU' //操作数据的函数 function doSomething() { console.log('doSomething() '+msg.toUpperCase()) } function doOtherthing () { console.log('doOtherthing() '+msg.toLowerCase()) } //向外暴露对象(给外部使用的方法) window.myModule2 = { doSomething: doSomething, doOtherthing: doOtherthing }})(window)

如此在压缩代码的时候,会将所有window替换为单个字母,而原来的代码则会原模原样的进行存储。

闭包的缺点以及解决

缺点:

函数执行完后, 函数内的局部变量没有释放, 占用内存时间会变长容易造成内存泄露

解决:

能不用闭包就不用及时释放(让其指向null)

例如:

闭包的面试题

答案: 第一个问号处:the window 第二个问号处: my object

要注意:

片段一没有形成闭包,片段二是有闭包的。此处涉及前面的一个知识点this:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JavaScript闭包
下一篇:全媒派:林生斌宣布了一条私人消息,怎么会演变成一起公共事件?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~