js 闭包

作者: _不能说的秘密i | 来源:发表于2019-11-17 20:31 被阅读0次

闭包 - closure

参考

闭包的特性

  • 封闭作用域
  • 延长变量的生命周期(被引用的 num 没有被直接释放)
  • 可用于封装模块(如: AMD CMD 规范)

闭包的产生

  • 函数嵌套
  • 内部函数引用外部函数的变量, 包含着引用变量的对象就叫闭包 colsure
function outter () {
    var num = 10;
    var inner = function () {
        num++;
        console.log(num);
    }
    return inner;
}

var inner = outter(); // 此时并没有产生闭包
inner(); // 产生了闭包 引用了num

[图片上传失败...(image-2bfa17-1573993871808)]

[图片上传失败...(image-fef6ac-1573993871808)]

闭包的应用

  • 将函数作为参数传递给其他函数来调用
/**
 * 遍历对象|数组
 * @param  {Object} obj       对象或者数组
 * @param  {Function} handler 处理函数
 */
function each(obj, handler) {
    if (obj && typeof obj === "object" && typeof handler === "function") {
        for (let key of obj) {
            handler(key, obj[key], obj);
        }
    }
    throw new Error("exception info...");
}


let obj = {id: 1001, name: 'testName'};
let arr = ['hello', 'world'];

each(obj, (key, val, obj) => {
    // ...
});

each(arr, (key, val, arr) => {
    // ...
});
  • 封装模块
// jQuery
(function(window) => {
    window.$ = function jQuery(selector, context) {
      // ...
    };
})(window);

// node.js
(function(exports, require, module, __filename, __dirname) {
    // Module code
});

闭包带来的问题

由于闭包会延长变量的生命周期, 导致变量不能及时被垃圾回收机制当做垃圾回收, 从而导致 内存泄漏

当内存泄漏多了, 就可能会导致 内存溢出

  • 内存泄漏

内存泄漏: 不再需要的内存空间一直被占用, 没有及时释放, 导致内存的浪费

  • 内存溢出

程序运行需要的内存过大, 超出硬件提供的最大内存

JS中常见的内存泄漏

  1. 占用内存特别大的全局变量
  2. 没有及时清理的 定时器 / 超时器
  3. 闭包

相关文章

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • JS闭包

    JS闭包 闭包练习

  • JS闭包问题(二)

    在之前的JS闭包问题(一)文章中大概介绍了一下JS闭包,同时讲了闭包与变量之间的问题,今天我们继续聊闭包,聊聊闭包...

  • JS闭包大结局(JS闭包系列3)

    在上一篇中再谈JS闭包(JS闭包系列2),我详细的介绍了JS中的变量作用域相关的概念,结合第一节关于JS闭包(JS...

  • JS闭包入门

    最近有看到朋友的面经里提到的JS闭包的问题,就想研究研究,以下是我对JS闭包的简单理解。 到底什么是JS闭包? 定...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • 再谈JS闭包(JS闭包系列2)

    这篇文章,来继续谈谈Javascript闭包的剩余问题。因为在上一篇文章中关于JS闭包(JS闭包系列1)主要简单的...

  • 简单的聊一下闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

  • 浅谈闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

  • 闭包??

    什么闭包,闭包有什么用?http://js.jirengu.com/pogadikofa/1/闭包是在某个作用域内...

网友评论

      本文标题:js 闭包

      本文链接:https://www.haomeiwen.com/subject/fhlmictx.html