1.什么是闭包
”官方“的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
通俗的说:JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。
2.举例说明
<script type="text/javascript">
var n = 1;//全局变量
function test1(){
var n2 = 2;//局部变量
}
alert(n2);//不能访问局部变量
</script>
如果我们想要访问局部变量,该怎么办呢?”闭包“就能解决这个问题,代码如下
<script type="text/javascript">
var n = 1;
function test1(){
var n2 = 2;
function inner(){ //inner是test1的嵌套函数,inner的存在依赖于test1
return n2;
}
return inner; //注意:返回的是inner函数
}
var value = test1(); //全局变量value引用inner函数(test1函数返回的是inner函数)
alert(value());//返回2
</script>
上面注解的3行就构成了”闭包“
3.闭包的优缺点
优点:(1).可以访问局部变量
(2).让这些变量的值始终保持在内存中。
优点一上面已经演示了,优点二看如下代码:
<script type="text/javascript">
var n = 1;
function test1(){
var n2 = 2;
function inner(){
n2++;//n2=3
return n2;
}
return inner;
}
var value = test1();
value();//n2=3
value();//n2=4
alert(value());//n2=5
</script>
解释:因为全局变量value引用函数inner,inner依赖于test1函数,全局变量一直都在内存中,所以test1函数的资源也一直都在函数中
缺点:正是由于优点二,变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
分享到:
相关推荐
陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQuery基础教程 的附录,发现附录A对JavaScript的闭包的介绍简单易懂,于是...
在这个"JavaScript案例(简单易懂:注释非常全面)"的压缩包中,包含了一系列精心编写的JavaScript示例,旨在帮助初学者和进阶者更好地理解和运用这门语言。 首先,这个压缩包提供了超过20个经典的JavaScript案例,这...
简单来说,闭包是指一个函数能够记住并访问其自身范围(称为词法作用域)内的变量,即使在其外部调用该函数时,这些变量仍然保持存活状态。这种现象允许我们创建私有变量和持久的状态,同时防止全局作用域污染。 ...
JavaScript闭包是编程语言中一个重要的概念,尤其对于JavaScript开发者来说,理解闭包至关重要。闭包的本质是一个函数,这个函数能够访问并操作其外部作用域的变量,即使在其外部作用域已经不再存在的情况下也能保持...
本文实例讲述了javascript闭包功能与用法。分享给大家供大家参考,具体如下: 理解闭包 闭包这个东西,确实是很麻烦。之前我自己的理解也是有一点误差,所以今天将文章修改修改,争取将自己的理解进一步准确化。 ...
描述中的"简单易懂"可能意味着这些小游戏的代码结构清晰,适合初学者学习。JavaScript小游戏可以帮助开发者学习和巩固基础语法、事件处理、DOM操作、闭包、函数、对象和类等概念。通过实践,开发者可以更好地理解...
闭包是JavaScript中一个核心且重要的概念,它允许函数访问并操作函数外部的变量。理解闭包,首先要明白JavaScript的作用域链原理。在JavaScript中,函数可以嵌套函数,内部函数可以访问外部函数的变量,这种访问关系...
在JavaScript的世界里,函数是第一公民,闭包、原型链、异步编程(如回调函数、Promise、async/await)等核心概念的理解至关重要。源码可能包含这些内容的实例,帮助我们更好地掌握它们。此外,DOM操作、事件处理、...
"Head First JavaScript"是一本面向初学者的优秀教材,旨在通过直观、易懂的方式教授JavaScript的核心概念和技术。这本书采用Head First系列的独特教学方法,以图像、故事和游戏等形式,帮助读者更轻松地理解和掌握...
它的API设计简洁,使得编写复杂的JavaScript代码变得简单易懂。 在学习JavaScript时,你需要了解基本语法、函数和对象的创建、闭包、原型链以及异步编程,如回调函数、Promise和async/await。同时,理解JavaScript...
JavaScript,作为全球最广泛使用的编程语言之一,是创建交互式网页和应用程序的关键工具。这篇教程将深入探讨一些经典的JavaScript技巧,旨在帮助开发者提高代码效率、可读性和维护性。以下是一些关键知识点: 1. *...
《Head First JavaScript中文版》是一本专为初学者设计的JavaScript编程教材,旨在通过直观、易懂的方式引导读者深入理解JavaScript的核心概念和技术。JavaScript是一种广泛应用于网页和互联网应用的脚本语言,它...
《Head First JavaScript(中文版)》是一本专为初学者设计的JavaScript编程教材,它以易懂、生动的方式深入浅出地介绍了JavaScript的核心概念和技术。这本书以高清PDF格式呈现,适合那些希望快速入门并深入理解...
本教材通过PPT形式,将这些知识点以直观、易懂的方式呈现,适合初学者系统学习JavaScript的基础知识,同时对于有一定经验的开发者,也可以作为复习和巩固的重要资料。通过深入学习和实践,你将能够熟练地运用...
JavaScript的高级特性,如闭包、模块化、Promise等,使得开发者能够构建复杂的前端应用。现代JavaScript框架,如React、Vue和Angular,进一步简化了大型应用的开发,提供组件化、状态管理和路由等功能。 总的来说,...
本书旨在通过浅显易懂的语言,帮助读者深入理解JavaScript语言的核心概念与技术细节,并结合实际开发场景进行讲解,让读者不仅知其然,还能知其所以然。 #### 二、书籍内容亮点 - **基础知识**:包括变量、数据类型...