接触闭包之后,看了好多网上的资料,看的越来越头疼,看到阮一峰的这篇之后,觉得对闭包有了个清楚的理解,反过来再看以前看过的有关javascript的闭包的文章,觉得好理解都了。以下是看后几篇文章的笔记记录。
阮一峰的有关JavaScript闭包的理解
在javascript函数内部可以直接读取全局变量,而在函数外部自然无法读取函数内的局部变量。
只有函数内部的子函数才能读取局部变量,这个函数内部的子函数就是闭包。
简单的点说,闭包就是定义在一个函数内部的函数。当然闭包的形式不只只有这一种,但是这是大多数时候的情况。
闭包的作用:它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
第二点举个例子说明下:
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
为什么内部变量会保持在内存中呢?原因就在内部子函数f2是一个全局变量,这导致该子函数f2始终在内存中,而该子函数f2的存在依赖于其父函数f1,
因此父函数f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。
ps:从闭包的作用来理解闭包
深入理解JavaScript闭包的理解
JavaScript中所有的function都是一个闭包。只是当调用结束后,私有变量无法访问,并且没有外部引用存在,内部对象就会被销毁。
而如果返回了函数,或者被全局引用,这个闭包就保留下来了。这时候就是大部分时候我们所谓的“闭包”。
最简单的闭包例子如下:
function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();
我们对闭包下个定义:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。
ps:这篇文章最大的收获是通过对javascript回收机制来理解闭包。
JavaScript内核系列闭包
ps:这遍文章列了几个闭包的应用如匿名自执行函数,实现封装,缓存.
Javascript闭包
允许使用内部函数--即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。
当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
ps:这篇文章是给出闭包定义最概括性的并且又容易的理解的。
分享到:
相关推荐
js闭包的个人理解
闭包的理解
JS闭包理解 什么是闭包? 当有一个函数想要访问另一个函数内部的变量,这个是访问不了的。所有我们要用闭包来访问。所以简单的来说,闭包就是连接函数内部和外部的一座桥梁,通过闭包我们能够访问其他函数内部的...
闭包的理解1
js 闭包的理解与注意事项
JavaScript闭包深入理解.pdf
深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系
NULL 博文链接:https://onestopweb.iteye.com/blog/2360023
为了帮助大家快速和较好地理解JavaScript函数中的闭包,本文对JavaScript的闭包进行了分析并进行简易的代码演示,希望本文能够给有需要的人带来一点小小的帮助。
本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。
网上的例子很多,讲解的和理解起来的简易程度不禁相同,整理的例子和吸收的帖子供大家参考
闭包的加深理解1
网上大多只是讲解js闭包的大概意思和小例子,但真实用于项目中又该怎么用呢。这个例子真实的告诉大家在项目中的用法
主要介绍了谈谈我对JavaScript原型和闭包系列理解(随手笔记8)的相关资料,需要的朋友可以参考下
离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...
js闭包 • 每个函数都有一个包含词法环境的执行上下文,它的词法环境确定了函数内的变量赋值以及对外部环境的引用。看上去函数“记住”了外部环境,但其实上是这个函数有个指向外部环境的引用。这就是“闭包”的...
JSR-335 将闭包引入了 Java 。闭包在现在的很多流行的语言中都存在,例如 C++、C# 。闭包允许我 们创建函数指针,并把它们作为参数传递。在这篇文章中,将粗略的看一遍Java8的特性,并介绍 Lambda表达式。而且将试...
3) 计算属性集闭包的算法,在课件里有详细说明。方法很简单,但用文字描述很抽象。。。。不解释。。。 4) 计算函数依赖的闭包。此步骤不作要求,但要会方法。个人总结:将所有属性元素组成一个集合(域)记为R;...
适合最低级菜鸟理解的重点难点知识---闭包.zip