闭包代码问题

yangyibang 2012-03-28 05:43:11
问题代码:

function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = function(){
return i;
}
}
return a;
}

a[0](),a[1](),a[2]()都是3.

都是为了能返回正确数组的值。代码1和代码2都可以返回[1,2,3]。书中《Object-Oriented JavaScript》为什么用代码1,而不用代码2呢?代码2不是更简洁吗?他们有什么区别呢?
代码1:

function f() {
function makeClosure(x) {
return function(){
return x;
}
}
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = makeClosure(i);
}
return a;
}


代码2:

function f() {
function makeClosure(x) {

return x;

}
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = makeClosure(i);
}
return a;
}
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hujiong_226 2012-03-30
  • 打赏
  • 举报
回复
++ 是什么意思?
Acesidonu 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
代码1返回给数组的是function;代码2返回给数组的是x的值,即i。

看闭包详细解释:http://blog.mitopi.com/?p=126
[/Quote]
++
挨踢直男 2012-03-28
  • 打赏
  • 举报
回复
书上只是举个例子。写程是怎么方便怎么写。并不是说闭包是javascript中的关键知识,那就一定要倒处使用。用的上的时候才用
KingViker 2012-03-28
  • 打赏
  • 举报
回复
闭包我感觉他的作用主要是在控制变量的作用域上,很显然啊 代码2 相当于只是限制了makeClosure()这个函数的作用域而已,没有保护变量x,
hujiong_226 2012-03-28
  • 打赏
  • 举报
回复
代码1返回给数组的是function;代码2返回给数组的是x的值,即i。

看闭包详细解释:http://blog.mitopi.com/?p=126

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧