摘要:闭包是函数内部的子函数能读取局部变量二闭包的特点函数里面嵌套函数内部函数能访问外部函数的变量定义的参数和变量不会回收三闭包的前提先明白什么是全局变量和局部变量中声明变量格式关键字变量名标识符。建议在退出函数之前,将不使用的局部变量全部删除。
一、闭包的概念
闭包是指一个函数能够访问其函数外部作用域中的变量。
JavaScript闭包是函数内部的子函数能读取局部变量
函数里面嵌套函数
内部函数能访问外部函数的变量
定义的参数和变量不会回收
三、JavaScript闭包的前提先明白什么是全局变量和局部变量
JavaScript中声明变量格式:var(关键字)+变量名(标识符)。
全局变量:
不在函数function内部用var关键字声明如:
var text; var text=10;
在函数function内部没有使用var关键字声明却直接赋值如:
function show(){
text=10;
}
局部变量:在函数function内部使用var关键字声明并赋值如:
function show(){
var text=10;
}
简单举1个小例子
创作一个列表鼠标点击时使其一行背景色变为红色,点击另一行时上次点击的变为原样。
首先创造列表
使用JavaScript闭包,先取出所有的li,然后用for循环找到一个个li并用function函数封装并给其添加样式,在函数内部for循环清除上一次点击的背景色。
由上面可以看出闭包的两个用途:一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
五、JavaScript闭包的缺点及其使用建议闭包有一个严重的缺点:内存浪费问题。不仅仅因为它常驻内存,更主要的是,对闭包的使用不当会造成无效内存的产生。
建议:在退出函数之前,将不使用的局部变量全部删除。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/96257.html
摘要:闭包在我理解是一种比较抽象的东西。所以我写了一篇博文来方便自己理解闭包。那么现在我们可以解释一下闭包的第一个定义在计算机科学中,闭包是引用了自由变量的函数。循环中创建闭包在我们使用的关键字之前,闭包的一个常见问题就出现在循环中创建闭包。 零. 前言 从我开始接触前端时就听说过闭包,但是一直不理解闭包究竟是什么。上网看了各种博客,大家对闭包的说法不一。闭包在我理解是一种比较抽象的东西。所...
摘要:译者按在上一篇博客,我们通过实现一个计数器,了解了如何使用闭包,这篇博客将提供一些代码示例,帮助大家理解闭包。然而,如果通过代码示例去理解闭包,则简单很多。不过,将闭包简单地看做局部变量,理解起来会更加简单。 - 译者按: 在上一篇博客,我们通过实现一个计数器,了解了如何使用闭包(Closure),这篇博客将提供一些代码示例,帮助大家理解闭包。 原文: JavaScript Clos...
摘要:如何在初学就理解闭包你需要接着读下去。这样定义闭包是函数和声明该函数的词法环境的组合。小结闭包在中随处可见。闭包是中的精华部分,理解它需要具备一定的作用域执行栈的知识。 这是本系列的第 4 篇文章。 作为 JS 初学者,第一次接触闭包的概念是因为写出了类似下面的代码: for (var i = 0; i < helpText.length; i++) { var item = he...
摘要:但是闭包也不是什么复杂到不可理解的东西,简而言之,闭包就是闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在。可惜的是,并没有提供相关的成员和方法来访问闭包中的局部变量。 (收藏自 技术狂) 前言:还是一篇入门文章。Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C++的程序员来说是一个新的语言特性。本文将...
摘要:当面试中让我解释一下闭包时我懵逼了。这个解释开始可能有点晦涩,让我们抽丝剥茧摘下闭包的真面目。此文不详述作用域有专门的主题阐述,不过作用域是理解闭包原理的基础。这才是闭包的真正便利之处。闭包使用不当就会很坑。 原文链接 为什么深度学习JavaScript? JavaScript如今是最流行的编程语言之一。它运行在浏览器、服务器、移动设备、桌面应用,也可能包括冰箱。无需我举其他再多不相干...
阅读 1590·2021-09-02 09:55
阅读 1043·2019-08-30 13:19
阅读 1362·2019-08-26 13:51
阅读 1410·2019-08-26 13:49
阅读 2290·2019-08-26 12:13
阅读 415·2019-08-26 11:52
阅读 1866·2019-08-26 10:58
阅读 3053·2019-08-26 10:19