请问 lua 里的闭包和 js 里的闭包处理结果怎么不一样?

2015-11-11 16:18:13 +08:00
 iambic
function foo()                                                                                
    local rs = {}                                                                             
    for i=1,10 do                                                                             
        rs[i] = function() return i end                                                       
    end                                                                                       
    return rs                                                                                 
end


local fn = foo()                                                                              

for i=1,#fn do
    print(fn[i]())
end

这段代码输出的结果是 1 2 3 ... 10

而下面这边 js 代码

function foo() {
    var rs = []; 
    for (var i=0; i <10; i++) {
        rs[i] = function() {
            return i;
        };  
    }   
    return rs; 
}

var fn = foo();

for (var i = 0; i < fn.length; i++) {
    console.log(fn[i]());
}

输出的结果是 10 10 10 ... 10

两者实现上似乎并无不一样啊?谢谢!

1891 次点击
所在节点    问与答
2 条回复
lujjjh
2015-11-11 16:37:56 +08:00
因为 javascript 中用 var 定义的变量的作用域不是块级的而是函数级的,所以两段代码不等价。

var 换成 let 就一样了。
iambic
2015-11-11 16:45:17 +08:00
@lujjjh 原来是这样。。多谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/235387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX