闭包的概念理解、目的、优缺点以及缺点的解决方案 |
您所在的位置:网站首页 › 淘宝优缺点和解决办法 › 闭包的概念理解、目的、优缺点以及缺点的解决方案 |
闭包的概念理解、目的、优缺点以及缺点的解决方案
闭包的概念理解
闭包概念理解:函数嵌套函数,内层函数引用内层函数的变量。 闭包的目的闭包的目的:要了解闭包的目的,首先要了解js的作用域和作用域链。作用域可以分为全局作用域和局部作用域。在全局作用域中声明的变量随处可以引用,但是在函数内部声明的局部变量,只能在函数内部使用,那么,如何实现在函数外部访问函数内部的变量呢?这就是闭包的目的所在。那么应该怎么实现呢?具体实现:外层函数定义子函数,子函数引用外部函数的局部变量,最后外部函数再返回子函数。在函数外部调用函数即可得到返回的子函数,也就实现了访问函数内部变量的效果。 闭包的优点 保存结果变量:当外部函数调用结束后,因为闭包并不会释放外部函数定义的局部变量,那么变量的值会得到保存;防止使用全局变量的污染 闭包的缺点及解决方案由于调用完外层函数后 得到了外层函数所返回的子函数 而子函数中引用了外部函数的变量 导致变量所占用的内存无法回收 如果无法合理使用闭包 会导致内存消耗较大 内存泄漏。解决方案就是再不需要使用闭包后 删除局部变量 可以设置为null 以下是本人写的关于闭包的demo,希望可以帮到大家! Document // =====================通过闭包实现累加===================================== function outer() { var count = 0 function inner() { console.log(++count) } return inner } // one two three是通过调用outer函数返回的三个相互独立的函数 // outer函数调用之后 count变量并没有被销毁 没有被内存回收 因为one函数仍然引用着count 那么再次调用one时 count的值会保留原来的值 var one = outer() one() // 1 one() // 2 one() // 3 one = null // 当不需要使用时 将one设置为null 释放内存 var two = outer() two() // 1 two() // 2 two() // 3 two = null // 当不需要使用时 将two设置为null 释放内存 var three = outer() three() // 1 three() // 2 three() // 3 three = null // 当不需要使用时 将three设置为null 释放内存 // ============通过全局变量实现累加================================================================ var num = 0 function doAdd() { console.log(++num) } doAdd() // 1 doAdd() // 2 doAdd() // 3 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |