Из интеллектуального любопытства, почему javascript принимает
var z = z || [];
для инициализации z (как z может быть определено изначально)
но без var выдает ошибку (в глобальном пространстве)
z = z || [];
(если z ранее не определено)
В глобальном пространстве вы не обязаны использовать VAR, хотя я понимаю, что это может быть плохой практикой.
Прежде чем вы скажете, что это дубликат таких вопросов, как
Какова цель ключевого слова var и когда его использовать это (или опустить)?
Обратите внимание на заявление о том, что "Если вы находитесь в глобальной области, то нет никакой разницы".
Очевидно, что это не на 100% верно, учитывая мой рабочий пример.
Это причуда или законная логика?
добавив краткое изложение ответа, как я его узнал:
Благодаря Тиму (см. Ниже) ключом к моему непониманию было то, что я не осознавал этого (основы javascript)
вар г; абсолютно ничего не делает, если z уже существует
Вот как это выражение, кажется, имеет оба варианта, если вы неверно предполагаете, что «var z» всегда инициализируется.
Начиная слева, «var z» просто гарантирует, что z определено, но на самом деле не влияет на какое-либо существующее значение, если оно уже существует. Затем справа, если z уже существует, она используется, если нет, переменная была только что объявлена (но пуста), поэтому она не будет использоваться, но не вызовет ошибки.
Это отличная статья о такого рода проблемах с областью действия и подъемом в Javascript: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting
Большое спасибо minitech и всем, кто внес свой вклад!