Javascript: z = z || [] выдает ошибку, если VAR не используется - почему?

Из чисто интеллектуального любопытства, почему javascript принимает

var z = z || [];

для инициализации z (как z может быть определено изначально)

, но без var он выдает ошибку (в глобальном пространстве)

z = z || [];

( если z ранее не было определено)

В глобальном пространстве от вас не требуется использовать VAR, хотя я понимаю, что это может быть плохой практикой.

Прежде чем вы скажете, это дубликат вопросов вроде

Какова цель ключевое слово var и когда его использовать (или опускать)?

Обратите внимание на декларацию, что «Если вы находитесь в глобальной области видимости, разницы нет».

Очевидно, что это не на 100% верно, учитывая мой рабочий пример.

Это причуда или есть законная логика?


добавление краткого изложения ответа, как я его усвоил:

Благодаря Тиму (см. Ниже) ключом к моему недоразумению было непонимание этого (фундаментальное JavaScript)

var z; Абсолютно ничего не делает, если z уже существует

Вот как это выражение, кажется, имеет обе стороны, если вы неверно предполагаете, что "var z" всегда инициализируется.

Начиная слева, «var z» просто проверяет, определен ли z, но фактически не влияет на какое-либо существующее значение, если оно уже существует. Затем справа, если z уже существует, он используется, если нет, переменная была только что объявлена ​​(но пуста), поэтому она не будет использоваться, но не вызовет ошибку.

Это отличная статья о проблемах с определением области видимости и подъема в Javascript: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting

Большое спасибо minitech и всем, кто тоже внес свой вклад!

7
задан Community 23 May 2017 в 12:11
поделиться