ÐлобалÑний обâÑÐºÑ Ð½Ð°Ð´Ð°Ñ Ð½Ð°Ð¼ змÑÐ½Ð½Ñ Ñа ÑÑнкÑÑÑ, ÑÐºÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð² бÑдÑ-ÑÐºÐ¾Ð¼Ñ Ð¼ÑÑÑÑ Ð¿ÑогÑами. Типово Ñе ÑÑ, ÑÐºÑ Ð²Ð±ÑÐ´Ð¾Ð²Ð°Ð½Ñ Ð² Ð¼Ð¾Ð²Ñ Ð°Ð±Ð¾ ÑеÑедовиÑе.
У бÑаÑзеÑÑ Ð²Ñн Ð¼Ð°Ñ Ð½Ð°Ð·Ð²Ñ window, Ñ Node.js â global, Ð´Ð»Ñ ÑнÑиÑ
ÑеÑÐµÐ´Ð¾Ð²Ð¸Ñ Ð²Ñн може маÑи ÑнÑÑ Ð½Ð°Ð·Ð²Ñ.
ÐеÑодавно до мови бÑло додано globalThis Ñк ÑÑандаÑÑÐ¸Ð·Ð¾Ð²Ð°Ð½Ñ Ð½Ð°Ð·Ð²Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного обâÑкÑа, Ñкий Ð¼Ð°Ñ Ð¿ÑдÑÑимÑваÑиÑÑ Ñ Ð²ÑÑÑ
ÑеÑедовиÑаÑ
. ÐÑн пÑдÑÑимÑÑÑÑÑÑ Ñ Ð²ÑÑÑ
оÑновниÑ
бÑаÑзеÑаÑ
.
Ðи бÑдемо викоÑиÑÑовÑваÑи window, вважаÑÑи, Ñо наÑе ÑеÑедовиÑе â Ñе бÑаÑзеÑ. ЯкÑо Ð²Ð°Ñ ÑкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶Ðµ пÑаÑÑваÑи в ÑнÑиÑ
ÑеÑедовиÑаÑ
, кÑаÑе викоÑиÑÑовÑваÑи замÑÑÑÑ ÑÑого globalThis.
Ðо вÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑей глобалÑного обâÑкÑа можна оÑÑимаÑи доÑÑÑп напÑÑмÑ:
alert("ÐÑивÑÑ");
// Ñе Ñе ж Ñаме, Ñо Ñ
window.alert("ÐÑивÑÑ");
У бÑаÑзеÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ñ ÑÑнкÑÑÑ Ñ Ð·Ð¼ÑÐ½Ð½Ñ Ð¾Ð³Ð¾Ð»Ð¾ÑÐµÐ½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ var (не let/const!) ÑÑаÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑми глобалÑного обâÑкÑа:
var gVar = 5;
alert(window.gVar); // 5 (змÑнна ÑÑала влаÑÑивÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного обâÑкÑа)
Так Ñамо ÑÑаÑÑÑÑÑ Ð· оголоÑеними ÑÑнкÑÑÑми (function declaration). ТобÑо з викоÑиÑÑаннÑм Ñлова function в оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð¿Ð¾ÑоÑÑ ÐºÐ¾Ð´Ñ, а не Ñк в ÑÑнкÑÑоналÑниÑ
виÑазаÑ
.
ÐÑÐ´Ñ Ð»Ð°Ñка, не покладайÑеÑÑ Ð½Ð° Ñе! Така поведÑнка ÑÑнÑÑ Ð· мÑÑкÑÐ²Ð°Ð½Ñ ÑÑмÑÑноÑÑÑ. СÑÑаÑÐ½Ñ ÑкÑипÑи викоÑиÑÑовÑÑÑÑ JavaScript модÑлÑ, де Ñакого не вÑдбÑваÑÑÑÑÑ
ЯкÑо замÑÑÑÑ var ми викоÑиÑÑаÑмо let, Ñакого не ÑÑанеÑÑÑÑ:
let gLet = 5;
alert(window.gLet); // undefined (змÑнна не ÑÑÐ°Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного обâÑкÑа)
ЯкÑо знаÑÐµÐ½Ð½Ñ Ð½Ð°ÑÑÑлÑки важливе, Ñо ви Ñ Ð¾ÑеÑе зÑобиÑи його глобалÑним, Ñо напиÑÑÑÑ Ð¹Ð¾Ð³Ð¾ безпоÑеÑеднÑо Ñк влаÑÑивÑÑÑÑ:
// Ñобимо ÑнÑоÑмаÑÑÑ Ð¿Ñо коÑиÑÑÑваÑа глобалÑноÑ, Ñоб вона бÑла доÑÑÑÐ¿Ð½Ð¾Ñ Ð² бÑдÑ-ÑÐºÐ¾Ð¼Ñ Ð¼ÑÑÑÑ ÐºÐ¾Ð´Ñ
window.currentUser = {
name: "John"
};
// деÑÑ Ñ ÐºÐ¾Ð´Ñ
alert(currentUser.name); // John
// або, ÑкÑо ми маÑмо локалÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ Ð· ÑмâÑм "currentUser"
// оÑÑимаймо ÑÑ Ð· window безпоÑеÑеднÑо (Ñак безпеÑнÑÑе!)
alert(window.currentUser.name); // John
ÐÑи ÑÑÐ¾Ð¼Ñ Ð·Ð°Ð·Ð²Ð¸Ñай не ÑекомендÑÑÑÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи глобалÑÐ½Ñ Ð·Ð¼ÑннÑ. СлÑд заÑÑоÑовÑваÑи ÑÑ Ñкомога ÑÑдÑе. Ðизайн кодÑ, пÑи ÑÐºÐ¾Ð¼Ñ ÑÑнкÑÑÑ Ð¾ÑÑимÑÑ Ð²Ñ ÑÐ´Ð½Ñ Ð¿Ð°ÑамеÑÑи Ñ Ð²Ð¸Ð´Ð°Ñ Ð¿ÐµÐ²Ð½Ð¸Ð¹ ÑезÑлÑÑаÑ, ÑиÑÑÑÑе, надÑйнÑÑе Ñ Ð·ÑÑÑнÑÑе Ð´Ð»Ñ ÑеÑÑÑваннÑ, нÑж коли викоÑиÑÑовÑÑÑÑÑÑ Ð·Ð¾Ð²Ð½ÑÑнÑ, а Ñим бÑлÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ñ Ð·Ð¼ÑннÑ.
ÐикоÑиÑÑÐ°Ð½Ð½Ñ Ð¿Ð¾Ð»ÑÑÑлÑв
Ðи викоÑиÑÑовÑÑмо глобалÑний обâÑÐºÑ Ð´Ð»Ñ ÑеÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑдÑÑимки ÑÑÑаÑÐ½Ð¸Ñ Ð¼Ð¾Ð²Ð½Ð¸Ñ ÑÑнкÑÑй бÑаÑзеÑом.
ÐапÑиклад, Ð´Ð»Ñ Ð¿ÐµÑевÑÑки Ñи ÑÑнÑÑ Ð²Ð±Ñдований обâÑÐºÑ Promise (його Ð½ÐµÐ¼Ð°Ñ Ñ Ð´Ñже ÑÑаÑиÑ
бÑаÑзеÑаÑ
):
if (!window.Promise) {
alert("ТвÑй бÑаÑÐ·ÐµÑ Ð·Ð°ÑÑаÑÑв!");
}
ЯкÑо його Ð½ÐµÐ¼Ð°Ñ (побаÑимо повÑдомленнÑ: âТвÑй бÑаÑÐ·ÐµÑ Ð·Ð°ÑÑаÑÑв!â), Ñо ми можемо ÑÑвоÑиÑи âполÑÑÑлиâ, Ñоб додаÑи пÑдÑÑÐ¸Ð¼ÐºÑ ÑÑого обâÑкÑÑ. ТобÑо Ñоб додаÑи ÑÑнкÑÑÑ, ÑÐºÑ Ð½Ðµ пÑдÑÑимÑÑÑÑÑÑ ÑеÑедовиÑем, але ÑÑнÑÑÑÑ Ñ ÑÑÑаÑÐ½Ð¾Ð¼Ñ ÑÑандаÑÑÑ.
if (!window.Promise) {
window.Promise = ... // Ðе ÑÑандаÑÑна ÑеалÑзаÑÑÑ `Promise`
}
ÐÑдÑÑмки
-
ÐлобалÑний обâÑÐºÑ Ð¼ÑÑÑиÑÑ Ð·Ð¼ÑннÑ, ÑÐºÑ Ð¼Ð°ÑÑÑ Ð±ÑÑи доÑÑÑпними ÑкÑÑзÑ.
ÐклÑÑаÑÑи вбÑÐ´Ð¾Ð²Ð°Ð½Ñ Ñ JavaScript, ÑÐ°ÐºÑ Ñк
Array, Ñа знаÑеннÑ, Ñ Ð°ÑакÑеÑÐ½Ñ Ð´Ð»Ñ ÑеÑедовиÑа, ÑÐ°ÐºÑ Ñкwindow.innerHeightâ виÑоÑа вÑкна Ñ Ð±ÑаÑзеÑÑ. -
ÐлобалÑний обâÑÐºÑ Ð¼Ð°Ñ ÑнÑвеÑÑалÑÐ½Ñ Ð½Ð°Ð·Ð²Ñ
globalThis.⦠Ðле ÑаÑÑÑÑе згадÑÑÑÑÑÑ ÑпеÑиÑÑÑÐ½Ñ Ð½Ð°Ð·Ð²Ð¸ ÑеÑедовиÑа âÑÑаÑÐ¾Ñ Ñколиâ, ÑÐ°ÐºÑ Ñк
window(бÑаÑзеÑ) Ñаglobal(Node.js). -
Ðи Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð·Ð±ÐµÑÑгаÑи знаÑÐµÐ½Ð½Ñ Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ð¾Ð¼Ñ Ð¾Ð±âÑкÑÑ, лиÑе ÑкÑо вони дÑйÑно глобалÑÐ½Ñ Ð´Ð»Ñ Ð½Ð°Ñого пÑоÑкÑÑ. Ð ÑÑаÑаÑиÑÑ Ð¿Ð¸ÑаÑи код Ñак, Ñоб ÑÐ°ÐºÐ¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ñ Ð±Ñло Ñкомога менÑе.
-
РбÑаÑзеÑÐ°Ñ , ÑкÑо ми не викоÑиÑÑовÑÑмо модÑлÑ, глобалÑÐ½Ñ ÑÑнкÑÑÑ Ñа змÑннÑ, оголоÑÐµÐ½Ñ Ð·Ð° допомогоÑ
var, ÑÑаÑÑÑ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного обâÑкÑа. -
ÐÐ»Ñ Ñого, Ñоб код бÑв пÑоÑÑÑÑим Ñ Ð² майбÑÑнÑÐ¾Ð¼Ñ Ð¹Ð¾Ð³Ð¾ легÑе бÑло пÑдÑÑимÑваÑи, ÑлÑд звеÑÑаÑиÑÑ Ð´Ð¾ влаÑÑивоÑÑей глобалÑного обâÑкÑа безпоÑеÑеднÑо, ÑеÑез
window.x.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)