|
15 | 15 | - При попытке доступа к глобальной переменной `undefined` (если она не была переопределена).
|
16 | 16 | - При попытке доступа к переменной, которая *ещё не была* инициализирована каким-либо значением.
|
17 | 17 | - Неявный возврат из функции при отсутствии в ней оператора `return`.
|
18 |
| - - Из операторов `return`, которые не возвращают явных значений. |
19 |
| - - В результате поиска несуществующего свойства у объекта (и доступа к нему). |
20 |
| - - При доступе к аргументам функции, которые явно не были в неё переданы. |
21 |
| - - При доступе ко всему, чьим значением является `undefined`. |
22 |
| - - В результате вычисления любого выражения в форме `void(выражение)`. |
| 18 | + - Из оператора `return`, который не возвращает явного значения. |
| 19 | + - В результате поиска несуществующего свойства у объекта (и/или доступа к нему). |
| 20 | + - При попытке доступа к аргументу функции, который не был передан в неё явно. |
| 21 | + - При попытке доступа ко всему, чьим значением является `undefined`. |
| 22 | + - В результате вычисления любого выражения, соответствующего форме `void(выражение)`. |
23 | 23 |
|
24 |
| -### Обработка изменений значения `undefined` |
| 24 | +### Защита от потенциальных изменений значения `undefined` |
25 | 25 |
|
26 |
| -Поскольку глобальная переменная `undefined` содержит копию настоящего *значения* `undefined`, присвоение этой переменной нового значения **не** изменяет значения *типа* `undefined`. |
| 26 | +Поскольку глобальная переменная `undefined` содержит копию реального *значения* `undefined`, присвоение этой переменной нового значения **не** изменяет значения у *типа* `undefined`. |
27 | 27 |
|
28 |
| -Но при этом, чтобы сравнить что-либо со *значением* `undefined` прежде нужно получить значение самой *переменной* `undefined`. |
| 28 | +Получается, чтобы проверить нечто с типом `undefined` на соответствие значению `undefined`, прежде нужно узнать изначальное значение переменной `undefined`. |
29 | 29 |
|
30 |
| -Чтобы защитить код от переопределения переменной `undefined`, часто используется техника [анонимной обёртки](#function.scopes), которая использует отсутствующий аргумент. |
| 30 | +Чтобы защитить код от переопределения переменной `undefined`, часто используют технику [анонимной обёртки](#function.scopes), в которую добавляют аргумент и намеренно не передают его значение. |
31 | 31 |
|
32 | 32 | var undefined = 123;
|
33 | 33 | (function(something, foo, undefined) {
|
|
45 | 45 |
|
46 | 46 | })('Hello World', 42);
|
47 | 47 |
|
48 |
| -Единственная разница между этими вариантами в том, что последняя версия будет больше на 4 байта при минификации, а в первом случае внутри анонимной обёртки нет дополнительного оператора `var`. |
| 48 | +Единственная разница между этими вариантами в том, что последняя версия будет больше на 4 байта при минификации, и в первом случае внутри анонимной обёртки нет дополнительного оператора `var`. |
49 | 49 |
|
50 |
| -### Использование `null` |
| 50 | +### Применение `null` |
51 | 51 |
|
52 |
| -Хотя `undefined` в контексте языка JavaScript чаще используется в качестве традиционного *null*, настоящий `null` (и тип и литерал) является в большей или меньшей степени просто другим типом данных. |
| 52 | +Хотя `undefined` в контексте языка JavaScript чаще используется в роли традиционного *null*, настоящий `null` (и тип и литерал) является, в некоторой степени, просто другим типом данных. |
53 | 53 |
|
54 |
| -Он используется во внутренних механизмах JavaScript (например для определения конца цепочки прототипов засчёт присваивания `Foo.prototype = null`). Но в большинстве случаев тип `null` может быть заменён на `undefined`. |
| 54 | +Он используется во внутренних механизмах JavaScript (в случаях вроде установки конца цепочки прототипов через присваивание `Foo.prototype = null`). Но почти во всех случаях тип `null` может быть заменён на `undefined`. |
55 | 55 |
|
0 commit comments