ÐлобалÑнÑй обÑÐµÐºÑ Ð¿ÑедоÑÑавлÑÐµÑ Ð¿ÐµÑеменнÑе и ÑÑнкÑии, доÑÑÑпнÑе в лÑбом меÑÑе пÑогÑаммÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо Ñе, ÑÑо вÑÑÑÐ¾ÐµÐ½Ñ Ð² ÑзÑк или ÑÑÐµÐ´Ñ Ð¸ÑполнениÑ.
РбÑаÑзеÑе он назÑваеÑÑÑ window, в Node.js â global, в дÑÑгой ÑÑеде иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð·ÑваÑÑÑÑ Ð¸Ð½Ð°Ñе.
Ðедавно globalThis бÑл добавлен в ÑзÑк как ÑÑандаÑÑизиÑованное Ð¸Ð¼Ñ Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного обÑекÑа, коÑоÑое должно поддеÑживаÑÑÑÑ Ð² лÑбом окÑÑжении. Ðн поддеÑживаеÑÑÑ Ð²Ð¾ вÑеÑ
оÑновнÑÑ
бÑаÑзеÑаÑ
.
Ðалее Ð¼Ñ Ð±Ñдем иÑполÑзоваÑÑ window, полагаÑ, ÑÑо наÑа ÑÑеда â бÑаÑзеÑ. ÐÑли ÑкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¸ в дÑÑгом окÑÑжении, лÑÑÑе бÑÐ´ÐµÑ globalThis.
Ðо вÑем ÑвойÑÑвам глобалÑного обÑекÑа можно обÑаÑаÑÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ:
alert("ÐÑивеÑ");
// ÑÑо Ñо же Ñамое, ÑÑо и
window.alert("ÐÑивеÑ");
РбÑаÑзеÑе глобалÑнÑе ÑÑнкÑии и пеÑеменнÑе, обÑÑвленнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ var (не let/const!), ÑÑановÑÑÑÑ ÑвойÑÑвами глобалÑного обÑекÑа:
var gVar = 5;
alert(window.gVar); // 5 (ÑÑановиÑÑÑ ÑвойÑÑвом глобалÑного обÑекÑа)
То же Ñамое каÑаеÑÑÑ ÑÑнкÑий, обÑÑвленнÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑинÑакÑиÑа Function Declaration (вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñ ÐºÐ»ÑÑевÑм Ñловом function в оÑновном поÑоке кода, не Function Expression)
ÐожалÑйÑÑа, не полагайÑеÑÑ Ð½Ð° ÑÑо. Такое поведение поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑовмеÑÑимоÑÑи. Ð ÑовÑеменнÑÑ Ð¿ÑоекÑÐ°Ñ , иÑполÑзÑÑÑÐ¸Ñ JavaScript-модÑли, Ñакого не пÑоиÑÑ Ð¾Ð´Ð¸Ñ.
ÐÑли Ð±Ñ Ð¼Ñ Ð¾Ð±ÑÑвили пеÑеменнÑÑ Ð¿Ñи помоÑи 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 = ... // ÑобÑÑÐ²ÐµÐ½Ð½Ð°Ñ ÑеализаÑÐ¸Ñ ÑовÑеменной возможноÑÑи ÑзÑка
}
ÐÑого
-
ÐлобалÑнÑй обÑÐµÐºÑ Ñ ÑÐ°Ð½Ð¸Ñ Ð¿ÐµÑеменнÑе, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð² лÑбом меÑÑе пÑогÑаммÑ.
ÐÑо вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÐºÐ°Ðº вÑÑÑоеннÑе обÑекÑÑ, напÑимеÑ,
Array, Ñак и Ñ Ð°ÑакÑеÑнÑе Ð´Ð»Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ ÑвойÑÑва, напÑимеÑ,window.innerHeightâ вÑÑоÑа окна бÑаÑзеÑа. -
ÐлобалÑнÑй обÑÐµÐºÑ Ð¸Ð¼ÐµÐµÑ ÑнивеÑÑалÑное Ð¸Ð¼Ñ â
globalThis.â¦Ðо ÑаÑе на него ÑÑÑлаÑÑÑÑ Ð¿Ð¾-ÑÑаÑомÑ, иÑполÑзÑÑ Ð¸Ð¼Ñ, Ñ Ð°ÑакÑеÑное Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ окÑÑжениÑ, Ñакое как
window(бÑаÑзеÑ) иglobal(Node.js). -
СледÑÐµÑ Ñ ÑаниÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² глобалÑном обÑекÑе, ÑолÑко еÑли они дейÑÑвиÑелÑно глобалÑÐ½Ñ Ð´Ð»Ñ Ð½Ð°Ñего пÑоекÑа. Ð ÑÑаÑаÑÑÑÑ ÑвеÑÑи Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво к минимÑмÑ.
-
РбÑаÑзеÑÐ°Ñ , еÑли ÑолÑко Ð¼Ñ Ð½Ðµ иÑполÑзÑем модÑли, глобалÑнÑе ÑÑнкÑии и пеÑеменнÑе, обÑÑвленнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
var, ÑÑановÑÑÑÑ ÑвойÑÑвами глобалÑного обÑекÑа. -
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð´ бÑл пÑоÑе и в бÑдÑÑем его легÑе бÑло поддеÑживаÑÑ, ÑледÑÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑвойÑÑвам глобалÑного обÑекÑа напÑÑмÑÑ, как
window.x.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)