美文网首页
我理解的闭包

我理解的闭包

作者: 最帅的坏兔子 | 来源:发表于2020-03-23 21:43 被阅读0次

一、 变量的作用域

一个变量的作用域(scope)是程序源代码中定义这个变量的区域。按变量作用域可以将变量分为全局变量局部变量
全局变量:在JavaScript代码中任何地方都是有定义的。
局部变量:在函数体内部有定义,作用域是局限性的。

var a = 0; //  全局变量a
function foo1() {
  console.log('a = ', a);  // 结果为 a = 0
}
console.log('a = ', a);  // 结果为 a = 0
// --------------
function foo2() {
  var b = 10;  // 局部变量b
  console.log('a = ', a);  // 结果为 a = 0
  console.log('b = ', b);  // 结果为 b = 10
}
// console.log('b = ', b)  // 打开注释后报错结果为 Uncaught ReferenceError: b is not defined

foo1();
foo2();

二、 闭包

理解上面的变量作用域,下面我们看看,怎么在函数的外面获得函数内部变量。

function foo1() {
  var a = 20;
  // 闭包函数foo2
  function foo2() {
    console.log('a = ', a);
    return a;
  }
  return foo2;
}
var b = foo1()();  // a = 20
console.log(b);  // 20

foo1包含着一个函数foo2,foo2就是一个闭包。在我看来,闭包就是一个函数,这个函数在另一个函数体内部,并且向父函数的外部,返回父函数内部的变量。闭包函数是父函数内部变量与外界的桥梁。

三、闭包的用途

  1. 可以用来读取函数内部的变量。
  2. 可以将变量保存在内存中,不被垃圾回收机制回收。

四、闭包的优缺点

优点:可以在函数外部操作函数内部变量。
缺点:由于闭包会让函数体内变量常驻内存,滥用闭包会导致内存泄露,影响性能。

原文作者:最帅的坏兔子
技术博客:https://www.jianshu.com/u/259b7db6cc20
90后,爱编程,爱运营,文艺与代码齐飞,魅力与智慧共存的全栈开发一枚。
坚持总结工作中遇到的技术问题,坚持记录工作中所思所见,可以加小编微信一起交流学习:hxa2wangting13815。

相关文章

  • Gradle开发-Groovy闭包

    # 闭包 闭包的基础知识 闭包的使用 闭包 this,owner,delegate 的理解 总结 ## 闭包的基础...

  • Swift5 闭包及其应用

    关于如何理解闭包 学习闭包的第一个难点就是理解闭包,可能很多人用了很久的闭包都还不太清楚闭包到底是什么,我这里提供...

  • 【js基础修炼之路】— 深入浅出理解闭包

    之前对于闭包的理解只是很肤浅的,只是浮于表面,这次深究了一下闭包,下面是我对闭包的理解。 什么是闭包? 引用高程里...

  • 自动闭包/逃逸闭包/非逃逸闭包

    自动闭包、逃逸闭包和非逃逸闭包三个概念有些不好理解,这里按我自己的理解总结一下,不对的地方请指正 一、非逃逸闭包:...

  • 我理解的闭包

    一、 变量的作用域 一个变量的作用域(scope)是程序源代码中定义这个变量的区域。按变量作用域可以将变量分为全局...

  • 闭包(Closure)

    我对闭包的理解 个人理解 : 闭包就是能够读取其他函数内部变量的函数。使用闭包主要是设计私有的方法和变量 优点:可...

  • JS闭包理解

    闭包的概念 闭包就是能够读取其他函数内部变量的函数。 一、变量的作用域 要理解闭包,首先必须理解Javascrip...

  • JS进阶系列之闭包

    我对闭包的理解就是:闭包就是能够读取其他函数内部变量的函数,可以把闭包简单理解为“定义在一个函数内部的函数”。 在...

  • 我从来不理解JavaScript闭包,直到有人这样向我解释它..

    摘要: 理解JS闭包。 原文:我从来不理解JavaScript闭包,直到有人这样向我解释它... 作者:前端小智 ...

  • 闭包理解

    这次我发现了个奇怪的问题,高程经典的闭包陷阱,竟然是把一个未执行的函数赋值给了一个数组项,当年的我太年轻,竟然没看...

网友评论

      本文标题:我理解的闭包

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