我所理解的JavaScript闭包
来源:互联网 发布:java方法的概念 编辑:程序博客网 时间:2024/06/04 18:47
现在自学JavaScript到了闭包的部分,看了好几遍《js高程》中有关闭包的部分,就我自己的理解,我通过举例子解释一下什么叫闭包,希望有js大神,看见我的这篇博客,能给予指导。
首先,上定义,《js高程》中是这样定义的,“闭包是指有权访问另一个函数作用域中的变量的函数”。也就是说,闭包是函数,它的功能是可以访问另一个函数作用域中的变量。
function f1(){ var a = 10; function f2(){ alert(a); }}
上例中的f2函数就是一个简单的闭包,他可以访问另一个函数f1中的变量。如果想在函数f1的外面访问f1中的变量怎么办呢?只要将函数f2作为返回值,将f2 return出去就好了。即
function f1(){ var a = 10; function f2(){ alert(a); } return f2;}var f = f1();f();
这是表面上看到的,那闭包在内存中是怎样的呢?还是拿上面的函数举例子,首先从作用域链讲起,全局作用域 -> f1作用域 -> f2作用域;当f1函数将f2函数返回之后,f1函数的功能执行完毕,本应该在内存中将其占用的内存回收掉,但是,f2函数还没执行完,f1的作用域在f2作用域链的上面,所以只有当f2执行完后,f1函数才会被销毁。
举个现实生活中的例子。外部函数是你的老板,内部函数是你。闭包的结构就相当于老板交给你一项工作,而在你工作的时候可以使用老板的所有资料,也就是访问外部函数的所有变量。当老板把这项任务交给你的时候,老板的工作基本上就已经完成了,也就是外部函数执行完成,此时老板就可以休息了吗?当然不是,他还要审查你的工作,检查你的进度,在这的意思仅仅是老板不会离职,也就是外部函数此时不会被销毁,只有当你把工作完成,他的工作也就全部完成了,此时,你们两个就都可以休假了,也就是内部函数、外部函数全部被销毁。有时候呢,老板会把你外派出去,也就是将内部函数return出去,把你派到哪,就看在哪接收你,如果内部函数中有this
,派给谁,this
就指向谁。
还是上代码
var name = '张三';var person1 = { name:'李四', sayName:function(){ return function(){ return this.name; } }}var person2 = { name:'王五', sayName:person1.sayName()}var sayName = person1.sayName();console.log(sayName()); //张三console.log(person2.sayName()); //王五console.log(person1.name); //李四
上面的代码举得有点失败,因为我不知道怎么通过person1中的sayName函数返回person1的name。
以上就是我所理解的JavaScript闭包,如果有不对的地方,希望您能提出来,共同进步。
- 我所理解的JavaScript闭包
- 我所理解的闭包
- 我对Javascript闭包的理解
- 我理解的JavaScript闭包
- 我理解的闭包
- 我理解的闭包
- 我理解的闭包
- 理解javascript的闭包
- 理解Javascript的闭包
- 理解Javascript的闭包
- 理解Javascript的闭包
- 理解Javascript的闭包
- Javascript的闭包理解
- 理解Javascript的闭包
- javascript 闭包的理解
- 理解Javascript的闭包
- Javascript闭包的理解
- 理解Javascript的闭包
- 11
- 理解javascript中的焦点管理
- setsockopt
- 刷清橙OJ--A1003.画长方形1
- Django template 中优雅的自定义权限过滤filter
- 我所理解的JavaScript闭包
- 【LeetCode】populating-next-roght-pointers-in-each-node i&ii
- android 控件高度计算
- C语言函数详解,linux,windows比较字符串
- 2016搜索基础21015
- cordvoa 调取本地通讯录
- tomcat7中使用websocket时如何调优
- CSS Media媒体查询
- 1005. Spell It Right (20)