前言:据我所知,网站上的文档并没有真正说明这一点,我甚至没有找到其他人提问,所以我很确定这两种形式是相同的,但我想要知道是否有人确切知道. 鉴于此Lua代码: function f() functio
鉴于此Lua代码:
function f() function a() ... end local function b() ... end ... end
a()和b()之间是否有任何功能差异?我说的是性能,访问,警告,任何事情.最后,他们在运行时是否都具有完全相同的底层表示?
我怀疑没有任何区别,但我不确定,这让我感到困扰.我知道a()的作用域是封闭函数f(),但是我不确定它是否真正使它成为局部变量的根本功能.用b(),我可以肯定.
我们从官方文档中了解到,我对上面b()的定义是语法糖:
local b b = function() ... end
我很想相信,即使我的定义中没有local关键字,a()的最终去糖定义也将完全遵循该格式,包括本地部分.
我觉得我不能假设这一点.
函数a()结束在代码块中,当函数运行时指定全局a *,而b保持函数的本地.也许这段代码会更好地说明事情:
function f() function a() end local function b() end end print(a, b) -- nil, nil f() print(a, b) -- function: 0xdeadbeef, nil
因此,为避免污染全局环境,您仍应使用函数内部的本地.
*除非你在f之上的其他范围内声明了本地,否则a将保持其范围.