闭合函数

来源:互联网 发布:啪嗒砰3召唤奇迹数据 编辑:程序博客网 时间:2024/05/01 17:55
将一个函数写在另一函数之内,那么这个位于内部的函数便可以访问外部函数中的局部变量,这项特征称之为“词法域”。
names={"Peter","Paul","Mary"}
grades={Mary=10,Paul=7,Peter=8}
table.sort(names,funtion(n1,n2)
   return grades[n1]>grades[n2]          --比较年级
end)

现在假设要单独创建一个函数来做这项工作:
function sortbygrade (names,grades)
table.sort(names,function(n1,n2)
    return grades[n1] >grades[n2]   --比较年级
end)
end

传递给sort的匿名函数可以访问参数grades,而grades是外部函数sortbygrade的局部变量。
在这个匿名函数内部,grades既不是全局变量也不是局部变量,将其称为一个“非局部的变量”.


一个closure就是一个函数加上该函数所需访问的所有“非局部的变量”.
如果再次调用newCounter,那么它会创建一个新的局部变量i,从而也将得到一个新的closure.
0 0
原创粉丝点击