- Notifications
You must be signed in to change notification settings - Fork179
Global object#166
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
Uh oh!
There was an error while loading.Please reload this page.
Merged
Global object#166
Changes fromall commits
Commits
Show all changes
20 commits Select commitHold shift + click to select a range
b63e9f7
Map and Set translation
e739584
Update translation
37bcae9
Fix word
Regnised4c8d232
Update 1-js/05-data-types/07-map-set/article.md
Regnised915ffdb
Update 1-js/05-data-types/07-map-set/article.md
Regnised5585083
Update 1-js/05-data-types/07-map-set/article.md
Regnised44a0613
Update 1-js/05-data-types/07-map-set/article.md
Regnised7b2db38
Update 1-js/05-data-types/07-map-set/article.md
Regniseda03cc54
Update 1-js/05-data-types/07-map-set/article.md
Regnisedee5e346
Update 1-js/05-data-types/07-map-set/article.md
Regnised9d95f57
Map and Set: spaces and other fixes
Regnisedaa21873
Merge branch 'master' of github.com:Regnised/uk.javascript.info
Regnised1be3f05
Update 1-js/05-data-types/07-map-set/02-filter-anagrams/solution.md
tarasyyyk0946f22
added 'Global object' translation
Regnised8ab5ac2
Merge branch 'javascript-tutorial:master' into master
Regnised6596e57
added 'Global object' translation
Regnisedfda569c
Revert "added 'Global object' translation"
Regnised9b8436b
translation and changed email
Regnised576fbe9
Merge branch 'master' of github.com:Regnised/uk.javascript.info
Regnised89dbfe7
Fix spaces
RegnisedFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
70 changes: 35 additions & 35 deletions1-js/06-advanced-functions/05-global-object/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,89 +1,89 @@ | ||
#Глобальний об’єкт | ||
Глобальний об’єкт надає змінні та функції, доступні в будь-якому місці програми. За замовчуванням ті, які вбудовані в мову або середовище. | ||
У браузері він має назву`window`,у Node.js--`global`,для інших середовищ він може мати іншу назву. | ||
Нещодавно до мови було додано `globalThis` як стандартизовану назву глобального об’єкта, який має підтримуватися у всіх середовищах. Він підтримується у всіх основних браузерах. | ||
Ми будемо використовувати`window`, вважаючи, що наше середовище -- це браузер. Якщо ваш скрипт може працювати в інших середовищах, краще використовувати замість цього `globalThis`. | ||
До всіх властивостей глобального об’єкта можна отримати доступ напряму: | ||
```js run | ||
alert("Привіт"); | ||
//це те ж саме, що і | ||
window.alert("Привіт"); | ||
``` | ||
У браузері глобальні функції і змінні оголошені за допомогою `var` (не `let/const`!)стають властивостями глобального об’єкта: | ||
```js run untrusted refresh | ||
var gVar = 5; | ||
alert(window.gVar); // 5 (змінна стала властивістю глобального об’єкта) | ||
``` | ||
Такий же ефект мають оголошення функцій (оператори з ключовим словом`function`у потоці основного коду, а не функціональні вирази). | ||
Будь ласка, не покладайтесь на це! Така поведінка існує з міркувань сумісності. Сучасні скрипти використовують [JavaScriptмодулі](info:modules), де такого не відбувається | ||
Якщо замість `var` ми використаємо`let`, такого не станеться: | ||
```js run untrusted refresh | ||
let gLet = 5; | ||
alert(window.gLet); // undefined (змінна не стає властивістю глобального об’єкта) | ||
``` | ||
Якщо значення настільки важливе, що ви хочете зробити його глобальним, то напишіть його безпосередньо як властивість: | ||
```js run | ||
*!* | ||
//робимо інформацію про користувача глобальною, щоб вона була доступною в будь-якому місці коду | ||
window.currentUser = { | ||
name: "John" | ||
}; | ||
*/!* | ||
//десь у коді | ||
alert(currentUser.name); // John | ||
//або, якщо ми маємо локальну змінну з ім’ям "currentUser" | ||
//отримаймо явно з window(безпечно!) | ||
alert(window.currentUser.name); // John | ||
``` | ||
При цьому зазвичай не рекомендується використовувати глобальні змінні. Слід застосовувати їх якомога рідше. Дизайн коду, при якому функція отримує вхідні параметри і видає певний результат, чистіше, надійніше і зручніше для тестування, ніж коли використовуються зовнішні, а тим більш глобальні змінні. | ||
##Використання поліфілів | ||
Ми використовуємо глобальний об’єкт для тестування підтримки сучасних мовних функцій браузером. | ||
Наприклад, перевірте, чи існує вбудований об’єкт `Promise`(його немає у дуже старих браузерах): | ||
```js run | ||
if (!window.Promise) { | ||
alert("Твій браузер застарів!"); | ||
} | ||
``` | ||
Якщо його немає (побачимо повідомлення: "Твій браузер застарів!"),ми можемо створити «поліфіли», щоб додати підтримку цього об’єкту. Додати функції, які не підтримуються середовищем, але існують у сучасному стандарті. | ||
```js run | ||
if (!window.Promise) { | ||
window.Promise = ... //Не стандартна реалізація `Promise` | ||
} | ||
``` | ||
##Підсумки | ||
-Глобальний об’єкт містить змінні, які мають бути доступними скрізь. | ||
Включаючи вбудовані у JavaScript, такі як `Array`, та значення, характерні для середовища, такі як `window.innerHeight` --висота вікна у браузері. | ||
-Глобальний об’єкт має універсальну назву `globalThis`. | ||
... Але частіше згадуються специфічні назви середовища "старої школи", такі як `window` (браузер) та `global` (Node.js). | ||
-Ми повинні зберігати значення у глобальному об’єкті, лише якщо вони дійсно глобальні для нашого проєкту. І тримати їх кількість мінімальною. | ||
-В браузерах, якщо ми не використовуємо [модулі](info:modules),глобальні функції та змінні, оголошені за допомогою`var`, стають властивістю глобального об’єкта. | ||
-Для того, щоб код був простішим і в майбутньому його легше було підтримувати, слід звертатися до властивостей глобального об’єкта безпосередньо, через `window.x`. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.