Причина, по которой он выводит пустое имя, состоит в том, что, как только у вас есть конфликтующие имена.Существует как локальное, так и глобальное имя global
.Внутри функции, которая определяет global
как локальный, все вхождения будут ссылаться на локальные.Он никогда не увидит глобального значения.
Следовательно, строка var global = global || []
интерпретирует global
как локальное.Это в настоящее время undefined
, следовательно, он выбирает []
.
Один из способов выполнить эту работу - использовать полное имя для глобального экземпляра
function test2() {
var global = window.global || [];
console.log(global); // outputs ["abc"]
}