Had a conversation about the lambdas do not capture local variables issue in LCOLONQ’s discord server. In particular, it was pointed out to me by @liquidcake1 that the value of Variant variables is itself a reference.

Before, I was mistakenly under the assumption that Variants were passed by reference and other primitive values were passed by value, but with this explanation it is now clear to me that everything is passed by value; it just happens that the value of a Variant is itself a reference. I think this design is less confusing than any alternative I can think of.

The documentation for Godot 4.2 is also consistent with this understanding, though it doesn’t talk about how Variant values are themselves references:

Godot 4.2 Docs:

Lambda functions capture the local environment. Local variables are passed by value, so they won’t be updated in the lambda if changed in the local function: