首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JS篇(016)-你对闭包的理解?优缺点?

JS篇(016)-你对闭包的理解?优缺点?

作者头像
齐丶先丶森
发布2022-05-12 20:24:02
发布2022-05-12 20:24:02
4380
举报
文章被收录于专栏:前端面试秘籍前端面试秘籍

答案: 概念:闭包就是能够读取其他函数内部变量的函数。 三大特性: * 函数嵌套函数。 * 函数内部可以引用外部的参数和变量。 * 参数和变量不会被垃圾回收机制回收。 优点: * 希望一个变量长期存储在内存中。 * 避免全局变量的污染。 * 私有成员的存在。 缺点: * 常驻内存,增加内存使用量。 * 使用不当会很容易造成内存泄露。 示例:

代码语言:javascript
复制
function outer() {
    var name = "jack";
    function inner() {
        console.log(name);
    }
    return inner;
}
outer()(); // jack
代码语言:javascript
复制
function sayHi(name) {
    return () => {
        console.log( `Hi! ${name}` );
    };
}
const test = sayHi("xiaoming");
test(); // Hi! xiaoming

虽然 sayHi 函数已经执行完毕,但是其活动对象也不会被销毁,因为 test 函数仍然引用着 sayHi 函数中的变量 name,这就是闭包。 但也因为闭包引用着另一个函数的变量,导致另一个函数已经不使用了也无法销毁,所以闭包使用过多,会占用较多的内存,这也是一个副作用。 解析: 由于在 ECMA2015 中,只有函数才能分割作用域,函数内部可以访问当前作用域的变量,但是外部无法访问函数内部的变量,所以闭包可以理解成“定义在一个函数内部的函数,外部可以通过内部返回的函数访问内部函数的变量“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 [参与互动](https://github.com/yisainan/web-interview/issues/185)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端面试秘籍 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档