V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
iambic
V2EX  ›  问与答

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

  •  
  •   iambic · 2015-11-11 16:18:13 +08:00 · 1876 次点击
    这是一个创建于 3285 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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

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

    2 条回复    2015-11-11 16:45:17 +08:00
    lujjjh
        1
    lujjjh  
       2015-11-11 16:37:56 +08:00
    因为 javascript 中用 var 定义的变量的作用域不是块级的而是函数级的,所以两段代码不等价。

    var 换成 let 就一样了。
    iambic
        2
    iambic  
    OP
       2015-11-11 16:45:17 +08:00
    @lujjjh 原来是这样。。多谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:01 · PVG 20:01 · LAX 04:01 · JFK 07:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.