美文网首页
JS 中的闭包

JS 中的闭包

作者: limengzhe | 来源:发表于2020-09-25 19:24 被阅读0次

函数和对其周围状态的引用捆绑在一起构成闭包 closure 。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。

通俗理解

  • 函数中的函数就叫闭包。
  • 一个函数可以访问另外一个函数的内部变量,这个函数就叫闭包。
  • 闭包是一个定义在父函数里面的函数。

闭包拥有如下三个作用域的访问权:

  • 自身的作用域
  • 父作用域
  • 全局作用域

示例

var globalVar = "abc";
(function outerFunction (outerArg) {
  var outerFuncVar = 'x';    
  (function innerFunction (innerArg) {
    var innerFuncVar = "y";
    console.log(         
      "outerArg = " + outerArg + "\n" + // 7
      "outerFuncVar = " + outerFuncVar + "\n" + // x
      "innerArg = " + innerArg + "\n" + // 5
      "innerFuncVar = " + innerFuncVar + "\n" + // y
      "globalVar = " + globalVar); // abc
  })(5);
})(7);

实际应用

  • 输出 0 - 9
for(var i = 0; i < 10; i++) {
    (function (i) {
        setTimeout(() => {
            console.log(i)
        }, 0);
    })(i);
};

需要注意的地方

  • 由于闭包会使得函数中的变量都会被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。
  • 闭包会在父函数外部改变父函数内部变量的值。所以如果你把父函数当作对象使用,把闭包当作的它的公用方法,把内部变量当作他的私有属性,这时一定要小心不要随便改变父函数内部变量的值。

相关文章

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

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

  • 简单的聊一下闭包

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

  • 浅谈闭包

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

  • php之闭包函数(Closure)

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

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

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

  • JS闭包

    JS闭包 闭包练习

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

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

  • 2018-01-10

    js中的闭包 一.什么是闭包 闭包官方的解释是:闭包就是能够读取其他函数内部变量的函数。由于在javascr...

  • js经典题目

    1闭包 链接:学习Javascript闭包(Closure) setTimeout在js单线程中只是放在队列中并未...

  • 前端面试题(持续补充)

    js,node.js基础: 闭包 闭包是能够读取其他函数内部变量的函数。在js中,只有函数内部的子函数可以访问内部...

网友评论

      本文标题:JS 中的闭包

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