Yep @Eestlane771 and @Blockzez has explained it pretty well,
Firstly what :GetChildren does, it get’s the children which are instances that have parent = to Workspace. In explorer it would look like this:

It would return Camera (Maybe not on server as camera only exists locally), Terrain, SpawnLocation, and Baseplate. The order cannot be relied upon due to Luau internal engines somehow.
Here is my attempt at explaining IPairs
local tableOfChildren = game.Workspace:GetChildren()
--Imagine this is in workspace
--What happens if you print out tableOfChildren
local tableOfChildren = {
[1] = part1; --Some part1 Instance in workspace
[2] = part2;
[3] = Terrain;
}
for index, value in ipairs(tableOfChildren) do
end
What the for loop does is iterate starting from the first index, 1 until the end of the table.
First it goes to number 1, and obtains the index the number [1] and the value which is part1.
The index is highlighted as green, and value underlined in red.
This is what is accessed by the loop,
for index, value in ipairs(tableOfChildren) do
--For the first iteration
--index = 1
--value = part1
end
Then it will go on to the next entry,
The index is highlighted as green, and value underlined in red. So index = 2 and value is equal to part2

for index, value in ipairs(tableOfChildren) do
--For the second iteration
--index = 2
--value = part2
end
And it will continue until the last entry.
Also be aware that the function :GetChildren() doesn’t have a set order like part1, part2, Terrain.