Чтобы немного расширить превосходный ответ @ Barmar - проблема в том, что массивы и другие объекты не на самом деле"передаются по ссылке" в Javascript, даже если кажется, что в большинстве случаев это так, и это часто так описывают. Они передаются по значению, как и все другие переменные, но само это «значение» является «ссылкой» на фактическое значение, хранящееся в памяти, а не на другую переменную.
Так что, если бы вы изменили citiesNames
, скажем, push
, добавив на него новый элемент, это отразилось бы вне функции - потому что вы изменили бы это общее значение, к которому относятся обе переменные citiesNames
( локальные и глобальные) являются ссылками на.
Но когда вы делаете citiesNames=[]
, вы берете локальную переменную citiesNames
и переназначаете ее на совершенно новое значение, и ваша другая переменная citiesNames
никак не может узнать об этом.
Это поведение не является уникальным для Javascript. Python, безусловно, ведет себя так же (и, возможно, другие тоже, с которыми я не так хорошо знаком).