闭包(一)
来源:互联网 发布:魔兽世界7.0画面优化 编辑:程序博客网 时间:2024/05/05 09:24
闭包的概念十分的抽象,直接上干货吧
function A(){ var num=0; function B(){console.log(++num); } return B;}var C=A();C();//1C();//2C();//3在这段代码中,B是在函数A内部声明的函数,但是因为A中将B给return了出去,所以在A外部声明的var C=A(),相当于将C指向了函数B,这就形成了闭包。简单的说,就是内部的函数被外部的变量引用,这就是闭包。
因为内部函数B在外部被引用,所以A内部的变量num不会被释放(涉及到JavaScript的内存回收机制),A的内部就形成了一个相对独立的环境。多次C()的执行,相当于在A的这个环境内,多次执行了B方法。所以,num的值因为每次都执行了++num而变化。
再来稍微深入一点点
function A(){ var num=0; function B(){console.log(++num); } return B;}var C=A();C();//1C();//2C();//3var D=A();D();//1D();//2C();//4可以看到在执行方法D的时候,num的值又是重新从0开始,但是再执行第四次C的时候,输出的却是4,这说明了什么?
说明了两次闭包的形成各自被赋予了一块独立的内存,两块内存之前互不干扰。
阅读全文
0 0
- 闭包(一)
- 闭包(一)
- javascript (一)闭包
- 理解闭包(一)
- 理解闭包(一)
- 深入理解javascript闭包(一)
- javascript 中的闭包(一)
- 深入理解javascript闭包(一)
- 深入理解javascript闭包(一)
- JS笔记(一)闭包
- JavaScript闭包讨论(一)
- javascript闭包入门理解(一)
- 一、什么是闭包?
- js闭包(一)
- atomic 包(一)
- 一、闭包的定义。
- Lua集锦一 闭包
- java.util包(一)
- NoSQL 中一匹黑马 Clickhouse
- C/C++中volatile关键字详解
- JAVA中使用LDAP进行用户认证
- 从0开始架构一个IOS程序—— 05— NavigationBar 搭建首页面
- c++笔记
- 闭包(一)
- Linux指令--alias
- Java 加号变乘号
- NYOJ题目79-拦截导弹(最长递减子序列)
- 【Linux学习笔记】19:Bash基础-命令别名与快捷键
- GNU hightec linker(把变量定义到固定内存地址)
- amcl源码分析
- txt读取文件字符编码 解决办法
- <c:forEach>详解