【发布时间】:2018-06-26 21:13:06
【问题描述】:
前言:据我所知,网站上的文档并没有真正说明这一点,而且我什至没有找到其他人问这个问题,所以我很漂亮确定这两种形式是相同的,但我想知道是否有人知道确定。
鉴于此 Lua 代码:
function f()
function a() ... end
local function b() ... end
...
end
a() 和b() 之间在功能上有什么区别吗?我说的是性能、访问权限、注意事项等等。最后,它们在运行时是否具有完全相同的底层表示?
我怀疑没有任何区别,但我不确定确定,这让我很烦恼。我知道a() 是作用域 到封闭函数f(),但我不确定这是否真的使它成为一个局部变量,就事物如何在引擎盖下运行而言。有了b(),我可以确定。
我们从官方文档中知道,我上面对b() 的定义是语法糖:
local b
b = function() ... end
我很想相信,即使 my 定义中没有 local 关键字,a() 的最终脱糖定义也将完全遵循该格式,包括 @ 987654331@ 部分。
我只是觉得我无法假设这个。
【问题讨论】:
-
澄清几点:1)函数是值;只有变量是局部的或全局的。 2) 函数有一个定义表达式(或等效语句),它在执行时创建一个函数值,而不是一个声明。 3) f 或 a 可以是本地的,除非您在编译的块中显示了整个代码。 4) a 不在封闭块的范围内。