美文网首页
什么是闭包?闭包的用途是什么?

什么是闭包?闭包的用途是什么?

作者: sxh不是帅小伙 | 来源:发表于2019-08-20 20:48 被阅读0次

闭包的概念:

闭包是指有权访问另一个函数作用域中的变量的函数。
如以下代码:

function outside() {
  let name = 'zs';
  function inside() {
    console.log(name);
  } 
}

在outside函数内部定义的函数inside访问了outside函数内部的变量,这就产生了闭包。

闭包的作用:

闭包可以用在很多地方,它最大的作用有两个:
1.可以读取函数内部的变量
2.让这些变量的值始终保存在内存中

如下代码:

function outside() {
  let name = 'zs';
  return function inside() {
    console.log(name);
  } 
}
let f = outside();
f();

运行以上代码会打印出zs,从上面的例子可以看出在outside函数的内部变量被外部引用了。
下面介绍变量的值始终保存在内存的例子

function outside(){
  let n=999;
  nAdd = function() {
    n += 1
  };
  function inside() {
    console.log(n);
  }
  return inside;
}
let f = outside();
f(); // 打印999
nAdd();
f(); // 打印1000

在这段代码中,f实际上就是inside函数。它一共运行了两次,第一次控制台打印999,第二次控制台打印1000。这证明了,函数outside中的局部变量n一直保存在内存中,并没有在outside调用后被自动清除。因为outside是inside的父函数,而inside被赋给了一个全局变量f,这导致inside始终在内存中,而inside的存在依赖于outside,因此outside也始终在内存中,不会在调用结束后,被垃圾回收机制(garbagecollection)回收。这段代码中另一个值得注意的地方,就是"nAdd=function(){n+=1}"这一行,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以可以在函数外部对函数内部的局部变量进行操作。

相关文章

  • 前端常见问题总结

    什么是闭包?闭包的用途是什么?闭包的缺点是什么? 什么是闭包 闭包:内部函数总是可以访问其所在的外部函数中声明的参...

  • 闭包、call-apply-bind 的用法 、HTTP状态码

    一、什么是闭包?闭包的用途是什么?闭包的缺点是什么? 答 :1、什么是闭包:如果一个函数用到了外部的变量,那么这个...

  • 闭包,call、apply、bind 的用法,HTTP 状态码

    什么是闭包?闭包的用途是什么?闭包的缺点是什么?• 闭包:如果一个函数用到了外部的变量,那么这个函数加这个变量就叫...

  • 闭包的理解

    什么是闭包,闭包的用途是什么? 闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部...

  • 闭包的总结

    围绕:闭包是什么?闭包的用途有哪些?闭包的缺点是什么? 这三个问题来进行总结 一、何为闭包?如果一个函数用到了外部...

  • 什么是闭包?闭包的用途是什么?

    什么是闭包: 如果一个函数用到了它作用域外面的变量,那么这个变量和这个函数之间的环境就叫闭包。 闭包的用途有些什么...

  • 什么是闭包?闭包的用途是什么?

    闭包的概念: 闭包是指有权访问另一个函数作用域中的变量的函数。如以下代码: 在outside函数内部定义的函数in...

  • 什么是闭包,闭包的用途是什么?

    什么是闭包? 闭包:如果一个函数使用了它范围外的变量,那么 这个函数+这个变量 就是闭包。 这函数 最后 输出的 ...

  • 什么是闭包,闭包的用途是什么?

    闭包是由函数和函数内部能访问到的变量组成的,在js中函数内部可以直接读取全局变量,而当我们想要得到函数内局部变量的...

  • 闭包的理解

    闭包目的: 闭包三个特性: 闭包的用途: 闭包的优点: 闭包的缺点: 参考文献: https://zhuanlan...

网友评论

      本文标题:什么是闭包?闭包的用途是什么?

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