JS 闭包

作者: 弱冠而不立 | 来源:发表于2020-09-16 20:42 被阅读0次

写在开头:
理解闭包其实只需要理解一句话:函数的作用域是在函数定义时就确定了的,和在哪里调用这个函数无关

闭包能干吗?

  1. 根据 JS 的函数作用域来了解,JS 函数内部的局部变量只能在函数内部访问,通过闭包我们可以在函数外部来访问函数内部的局部变量。
  2. 函数体内的变量的值,可能会随着函数的反复调用重新赋值,通过闭包我们可以让这些变量的值始终保持在内存中不被重新赋值。

闭包是什么?

闭包是一个函数
这个函数是在另一个函数内部定义了的,且通过return返回的函数
返回的函数内操作了一个局部变量
返回的函数被接收之后,再调用,就可以间接操作局部变量。

例如:

        function outside() {
            var str = "outside";
            return function() {
                str = "inside";
                console.log(str);
            }
        }
        let getStr = outside();
        getStr();  // inside
        function outside(value) {
            var str = "inside";
            return function() {
                str = value;
                console.log(str);
            }
        }
        let getStr = outside("outside");
        getStr();  //outside

闭包的分类

1. 函数闭包:

注意第二段的代码,它并没有返回 f2 只是将 f2 在 f1 中调用,所以调用 f1 时,每次都将 n 重新赋值。而对于第一段和第三段代码来说,每次调用的来说都是 f2 ,而 n 相对于 f2 来说就可以算一个全局变量,所以每次的值都是上一次累计的。

2. 对象闭包:


obj 中有个 getName 函数,函数返回的是一个匿名函数,而匿名函数返回的是 this 下的 name, 当 obj.getName 赋值给 re 时,实际上就是将这个匿名函数赋值给 re,然后调用 re 时,re属于全局作用域,所以 re 的 this 指向的就是 window 对象。

闭包的缺点

闭包的问题:内存泄漏(内存实在无法释放,造成系统内存的浪费)

相关文章

  • 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/hjxejktx.html