文章目录加载中

JavaScript基础-闭包

题目:解释下 js 的闭包

直接上MDN的解释:闭包是函数声明该函数的词法环境的组合。

而在 JavaScript 中,函数是被作为一级对象使用的,它既可以本当作值返回,还可以当作参数传递。理解了:“Js 中的函数运行在它们被定义的作用域,而不是它们被执行的作用域”(摘自《JavaScript 语言精粹》) 这句话即可。

题目:闭包优缺点

闭包封住了变量作用域,有效地防止了全局污染;但同时,它也存在内存泄漏的风险:

  • 在浏览器端可以通过强制刷新解决,对用户体验影响不大
  • 在服务端,由于 node 的内存限制和累积效应,可能会造成进程退出甚至服务器沓机

解决方法是显式对外暴露一个接口,专门用以清理变量:

function mockData() {
    const mem = {};
    return {
        clear: () => (mem = null), // 显式暴露清理接口
        get: page => {
            if (page in mem) {
                return mem[page];
            }
            mem[page] = Math.random();
        }
    };
}
本文来自心谭博客:xin-tan.com,经常更新web和算法的文章笔记,前往github查看目录归纳:github.com/dongyuanxin/blog
0