闭包
来源:互联网 发布:知味观点心 编辑:程序博客网 时间:2024/05/17 20:31
1
2
3
4
5
6
7
8
9
10
11
function Foo(){
var i=
0
;
return
function(){
document.write(i++);
}
}
var f1=Foo(),
f2=Foo();
f1();
f1();
f2();
请问以上程序的输出是()
正确答案: A
010
012
000
011
这是一个闭包,闭包可以用在许多地方。
它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
这里的局部变量i,对f1()来说是全局变量,对f2()来说也是全局变量,但是f1()的i跟f2()的i又是相互独立相互不可见的,f1()每执行一次,f1()的i就加一,f2()每次执行一次,f2()的i就加油,但是相互之间不影响,因此结果是010
1.当函数被创建时,内部[scope]属性被存储,在这个属性中保存一个包含全局变量对象的作用域链。
2.当函数被调用时,会创建一个执行环境及相应的作用域链,argument和实参为其进行初始化。
这里f1()函数和f2()函数在调用时会创建两个执行环境,保存各自的变量对象,结果是没有关系的。而同一个函数在多次调用时返回值会被保存在同一个变量对象中。
简言之,f1(),f2()分别创建了自己的执行环境,所以它们两个是相互独立的,执行之后都会返回一个匿名函数,这个匿名函数的作用域链被初始化为其包含函数的活动对象(这里也就是i)和全局变量对象,f1执行之后i并不会销毁,因为返回的匿名函数还要引用i,i仍然在内存中,所以执行两次之后i的值变成了1,而f2执行之后i为0
0 0
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- TensorFlow基本操作 实现卷积和池化
- Oracle procedure 基本语法
- ERR unknown command 'GEOADD'
- SQL ltrim()函数
- ASP.NET 发送邮件
- 闭包
- 将实体转化成json并将json转换成DataTable
- tensorflow中的tf.nn这类函数
- 1.Java类加载机制
- Windows 2012 配置VPN服务器教程
- ViewPage+frament不预加载下一个Frament数据解决办法
- 艺术编程-技术之声第十期
- Mongodb锁机制
- Maven