function aaa(){
var a=1;
var b=2;
function bbb(){
alert(b)//问题1:“内部函数引用了b,b就不会被垃圾回收机制回收”;意思是否是只要写完这个函数结构就形成引用 “b” 了?
}
}
function aaa(){
var a=1;
var b=2;
function bbb(){
alert(b)//问题1:“内部函数引用了b,b就不会被垃圾回收机制回收”;意思是否是只要写完这个函数结构就形成引用 “b” 了?
}
}
闭包的意义在于:当函数执行完毕的时候,你仍旧可以访问到这个函数内部的一些变量。
如果你没有在a函数内部抛出一个闭包b,然后这个闭包b被引用。是无法称之为闭包的。因为这个函数a内部的东西你肯定获取不到,马上就会被垃圾收集。
不是的,你将 bbb 函数 return 出去,用一个变量 c 来接收,然后执行c,此时 c 就引用了 bbb ,而 bbb 又引用了 aaa 中的 b 变量,所有 aaa 不会被回收
function aaa(){
var a=1;
var b=2;
return function bbb(){
alert(b)
}
}
var c = aaa(); 此时的 c 引用了 bbb ,间接引用了 aaa ,形成闭包
c(); // alert 2
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
内部函数可以看做一个闭包,闭包是可以由另外一个函数动态生成的函数,并且可以改变和存储函数外创建的变量的值。 满足三个条件
必须是一个嵌套的函数。
闭包必须返回嵌套函数。
嵌套函数必须引用一个外部的非全局的局部自由变量。
bbb是一个嵌套函数,满足第一点。
aaa返回了嵌套函数bbb,满足第二点。
bbb引用了非全局局部变量b,满足第三点。
以下链接谈到Python的闭包,不过概念是类似的。 http://imtuzi.com/post/5-pyth...