Эмм, нет, окончательное значение ns после запуска цикла foreach равно "[lindex $ nampspaceList end] :: setDefault", потому что в каждой итерации ns устанавливается для каждого элемента в списке $ nampspaceList.
Вы можете проверить это, добавив несколько позиций в середину кода.
Например, для вызова его с помощью: setDefault {ns1 ns2 ns3}
будет установлено значение ns ns1::setDefault
(после добавления ":: setDefault""), ns2::setDefault
и ns3::setDefault
.