c语言sscanf函数的用法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~