闭包的概念理解、目的、优缺点以及缺点的解决方案

闭包的概念理解、目的、优缺点以及缺点的解决方案

闭包的概念理解

闭包概念理解:函数嵌套函数,内层函数引用内层函数的变量。

闭包的目的

闭包的目的:要了解闭包的目的,首先要了解js的作用域和作用域链。作用域可以分为全局作用域和局部作用域。在全局作用域中声明的变量随处可以引用,但是在函数内部声明的局部变量,只能在函数内部使用,那么,如何实现在函数外部访问函数内部的变量呢?这就是闭包的目的所在。那么应该怎么实现呢?具体实现:外层函数定义子函数,子函数引用外部函数的局部变量,最后外部函数再返回子函数。在函数外部调用函数即可得到返回的子函数,也就实现了访问函数内部变量的效果。

闭包的优点

  1. 保存结果变量:当外部函数调用结束后,因为闭包并不会释放外部函数定义的局部变量,那么变量的值会得到保存;
  2. 防止使用全局变量的污染

闭包的缺点及解决方案

由于调用完外层函数后 得到了外层函数所返回的子函数 而子函数中引用了外部函数的变量 导致变量所占用的内存无法回收 如果无法合理使用闭包 会导致内存消耗较大 内存泄漏。解决方案就是再不需要使用闭包后 删除局部变量 可以设置为null

以下是本人写的关于闭包的demo,希望可以帮到大家!



<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Documenttitle>
head>
<body><script>//  =====================通过闭包实现累加=====================================function outer() {var count = 0function inner() {console.log(++count)}return inner}// one two three是通过调用outer函数返回的三个相互独立的函数  //  outer函数调用之后 count变量并没有被销毁 没有被内存回收 因为one函数仍然引用着count 那么再次调用one时 count的值会保留原来的值var one = outer()one() // 1one() // 2one() // 3one = null // 当不需要使用时 将one设置为null 释放内存var two = outer()two() // 1two() // 2two() // 3two = null // 当不需要使用时 将two设置为null 释放内存var three = outer()three() // 1three() // 2three() // 3three = null // 当不需要使用时 将three设置为null 释放内存//  ============通过全局变量实现累加================================================================var num = 0function doAdd() {console.log(++num)}doAdd() // 1doAdd() // 2doAdd() // 3script>
body>
html>


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部