• 谈谈闭包

    我第一次听说“闭包”这个概念是在学习Lua的时候。由于此前并没有接触到函数式编程的语言,所以满脑子C/C++的思维方式的我被“闭包”困惑了很久。我找到了一个比较通俗的闭包定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。Lua的学习资料上一般都会有一个这样关于闭包的例子:

    function new_counter()  
        local n = 0 
        local function counter()        
            n = n + 1       
            return n    
        end 
        return counter
    end 
    
    c1 = new_counter()
    c2 = new_counter()
    print(c1())  //打印1 
    print(c2())  //打印2
    

    首先,new_counter()是一个返回函数的函数;然后这个被返回的counter函数会更改其外部函数(new_counter)的局部变量,并返回计数值。注… 【查看更多】