This code works
for _, v in pairs(game.Players:GetPlayers()) do print(v.Name) end
But this code doesn't
local players = game.Players:GetPlayers() for _, v in pairs(players) do print(v.Name) end
Why not?
You see, when you predefine the children first, the content of it would never change, whether a child has been removed, or added, because you have defined it to a variable, and they never changes unless redefined. But when you use a full name, you are actually calling to get the table of children in execution time, that means that the table is not stationary and could change itself to include the full content of the parent.
You could still use the variable "short name" way, by redefining the variable when it's needed, but it's not recommended.