使result数组添加了三个匿名函数的引用。这句代码也可以写成
varp=function(){alert(item+''+list[i])};
result.push(p);
关于为什么会输出三次都是 "item 3 is undefined"
在上面的例子say667()例子中已经解释过了。
匿名函数function() {alert(item + ' ' + list[i])}中的list[i]并不是经过拷贝,而是对参数list的一个引用。直到函数buildList()返回为止,也就是说,返回最后一个引用。即遍历完list(注:list的最大下标应该是2)后,经过i++也就变成了3,这也就是为什么是item 3,而list[3]本身是没有初始化的,自然也就是undefined了。
例5。
<scripttype="text/javascript">
functionnewClosure(someNum,someRef){
//Localvariablesthatendupwithinclosure
varnum=someNum;
varanArray=[1,2,3];
varref=someRef;
returnfunction(x){
num+=x;
anArray.push(num);
alert('num:'+num+
'\nanArray'+anArray.toString()+
'\nref.someVar'+ref.someVar);
}
}
varclosure1=newClosure(40,{someVar:'never-online'})
varclosure2=newClosure(99,{someVar:'BlueDestiny'})
closure1(4)
closure2(3)
</script>
在这最后一个例子中,展示如何声明两个不同的闭包。 上一页 [1] [2] [3] |