局部变量在 lua 中实际上是如何工作的?

How does local variables actuallly work in lua?

我知道这是一个非常基本的问题,但我对 local 变量及其在 lua 中的范围感到很困惑,例如,如果我写 local x=12,这意味着变量 x 是一个局部变量,它的值是 12,但是如果我写 local x & 在下一行 x=12,这是否与以前的案例或 x=12 被视为全局变量?

每个作用域只使用一次 local 关键字,因此在您的示例中对 x 的第二次访问将使用本地 x。如果您随后希望访问全局 x,您可以使用 __G.x

你可以把它看成是两个完全独立的东西:

  1. local x 在本地范围内创建一个 "slot" 来保存一个值,即一个变量。这个变量被命名为 x。从那时起,直到您退出该范围,对 x 的任何引用都将引用该本地 x.

  2. x = 12 将值放入变量 x。如果您之前已经创建了一个名为 x 的本地插槽,那么它就会去哪里。如果范围内没有本地 x,它将进入全局范围。

local x = 12 只是一个 shorthand 用于组合这两个东西,创建一个局部变量并同时为其赋值。

所以是的,你的两个场景实际上是等价的。

local x
x = 12

local x = 12

做同样的事情。