Skip to content

Commit b963552

Browse files
authored
Translate new variant of the article. Vol. 1
1 parent 20a4755 commit b963552

1 file changed

Lines changed: 89 additions & 0 deletions

File tree

  • 1-js/06-advanced-functions/05-global-object

1-js/06-advanced-functions/05-global-object/article.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,95 @@
55

66
В браузере он называется "window", в Node.js — "global", в другой среде исполнения может называться иначе.
77

8+
Недавно, `globalThis` был добавлен в язык как стандартизированное имя для глобального объекта, которое должно поддерживаться в любом окружении. В некоторых браузерах, а именно, в Edge не на Chromium движке `globalThis` ещё не поддерживается, но может быть легко реализован с помощью полифила. Recently, `globalThis` was added to the language, as a standartized name for a global object, that should be supported across all environments. In some browsers, namely non-Chromium Edge, `globalThis` is not yet supported, but can be easily polyfilled.
9+
10+
Все свойства глобального объекта могут быть достигнуты на прямую. All properties of the global object can be accessed directly:
11+
12+
```js run
13+
alert("Привет");
14+
15+
// то же самое, что и
16+
window.alert("Привет");
17+
```
18+
19+
В браузере, глобальные переменные, объявленные, с помощью `var`, становятся свойствами глобального объекта. In a browser, global variables declared with `var` become the property of the global object:
20+
21+
```js run untrusted refresh
22+
var gVar = 5;
23+
24+
alert(window.gVar); // 5 (становится свойством глобального объекта) 5 (became a property of the global object)
25+
```
26+
27+
Пожалуйста, не полагайтесь на это. Такое поведение существует по причинам совместимости. Современные скрипты используют JavaScript-модули, где такого не происходит. Мы разберём их позже в главе [](info:modules). Please don't rely on that! This behavior exists for compatibility reasons. Modern scripts use JavaScript modules where such thing doesn't happen. We'll cover them later in the chapter [](info:modules).
28+
29+
Кроме того, более современные объявления переменных `let` и `const` вообще не проявляют такого поведения. Also, more modern variable declarations `let` and `const` do not exhibit such behavior at all:
30+
31+
```js run untrusted refresh
32+
let gLet = 5;
33+
34+
alert(window.gLet); // undefined (не становится свойством глобального объекта) undefined (doesn't become a property of the global object)
35+
```
36+
37+
Если свойство настольно важное, что вы хотете сделать его доступным глобально, запишите его напрямую, как свойство глобального объекта. If a value is so important that you'd like to make it available globally, write it directly as a property:
38+
39+
```js run
40+
*!*
41+
// сделать информацию о текущем пользователе глобальной, для предоставления доступа к ней всем скриптам make current user information global, to let all scripts access it
42+
window.currentUser = {
43+
name: "John"
44+
};
45+
*/!*
46+
47+
// где угодно в коде somewhere else in code
48+
alert(currentUser.name); // John
49+
50+
// или, если у нас есть локальная переменная с именем "value" or, if we have a local variable with the name "value"
51+
// полумим её из window явно (безопасно!) get it from window explicitly (safe!)
52+
alert(window.currentUser.name); // John
53+
```
54+
55+
Тем не менее, обычно не рекумендуется использование глобальных перемнныех. Следует пременять из как можно реже. Код, где функция на вход получает переменные и выдаёт определённый результат, чище, надёжней и удобней для тестирования. That said, using global variables is generally discouraged. There should be as few global variables as possible. The code design where a function gets "input" variables and produces certain "outcome" is clearer, less prone to errors and easier to test.
56+
57+
## Использование полифилов Using for polyfills
58+
59+
Мы можем проверить, поддерживает ли глобальный объект современные возможности языка.
60+
61+
Например, проверить наличие встроенного объекта `Promise` (такая поддержка отсутствует в очень старых браузерах):
62+
```js run
63+
if (!window.Promise) {
64+
alert("Ваш браузер очень старый!");
65+
}
66+
```
67+
68+
Если нет (скажем, используется старый браузер), мы можем создать полифил: добавить функции, которые не поддерживаются окружением, но существуют в современном стандарте. If there's none (say, we're in an old browser), we can create "polyfills": add functions that are not supported by the environment, but exist in the modern standard.
69+
70+
```js run
71+
if (!window.Promise) {
72+
window.Promise = ... // собственная реализация современной возможности языка custom implementation of the modern language feature
73+
}
74+
```
75+
76+
## Итого Summary
77+
78+
- Глобальный объект хранит переменные, которые должны быть доступны в любом месте программы. The global object holds variables that should be available everywhere.
79+
80+
Это включает в себя как встроенные конструкции, например, `Array`, так и характерные для окружения свойства, например, `window.innerHeight` -- высота окна браузера. That includes JavaScript built-ins, such as `Array` and environment-specific values, such as `window.innerHeight` -- the window height in the browser.
81+
- Глобальный объект имеет универсальное (общее??) имя -- `globalThis`. The global object has a universal name `globalThis`.
82+
83+
...Но чаще на него ссылаются по-старому, используя имя окружения, такое как `window` (браузер) и `global` (Node.js). Так как `globalThis` появился недавно, он не поддерживается браузерами, созданными не на движке Chromium (можно использовать полифил). But more often is referred by "old-school" environment-specific names, such as `window` (browser) and `global` (Node.js). As `globalThis` is a recent proposal, it's not supported in non-Chromium Edge (but can be polyfilled).
84+
- Следует хранить значения в глобальном объекте, только если они действительно глобальны для нашего проекта. И стараться свести их количество к минимуму. We should store values in the global object only if they're truly global for our project. And keep their number at minimum.
85+
- В браузерах, если только мы не используем [modules](info:modules), глобальные переменные, объявленные с помощью `var`, становятся свойствами глобального объекта. In-browser, unless we're using [modules](info:modules), a global variable declared with `var` becomes a property of the global object.
86+
87+
Для того, чтобы код был проще и его легче было поддерживать в будущем, следует обращаться к свойствам глобального объекта напрямую: `window.x = ...` вместо `var x = ...`. To make the code easier to understand and more future-proof, we should operate directly on the properties of the global object: `window.x = ...` instead of `var x = ...`.
88+
89+
---
90+
91+
# Глобальный объект
92+
93+
Глобальный объект предоставляет переменные и функции, доступные в любом месте программы. В основном те, что встроены в язык или среду исполнения.
94+
95+
В браузере он называется "window", в Node.js — "global", в другой среде исполнения может называться иначе.
96+
897
Например, вызовем `alert` как метод `window`:
998

1099
```js run

0 commit comments

Comments
 (0)