Found another Godot crime: https://github.com/godotengine/godot/issues/69014 It looks like lambdas do not capture local variables as they only copy the value of each variable. However, since Variant is passed by reference, you can use a Variant to get around this problem. For example, this does not work: func foobar(): var stop = false var stop_callback = func(): stop = true some_signal.connect(stop_callback) await get_tree().create_timer(10).timeout print(stop) # Always false But this does: func foobar(): var stop = { "value": false } var stop_callback = func(): stop["value"] = true some_signal.connect(stop_callback) await get_tree().create_timer(10).timeout print(stop["value"]) # Either true or false