W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
全局對象提供可在任何地方使用的變量和函數(shù)。默認情況下,這些全局變量內(nèi)建于語言或環(huán)境中。
在瀏覽器中,它的名字是 “window”,對 Node.js 而言,它的名字是 “global”,其它環(huán)境可能用的是別的名字。
最近,globalThis
被作為全局對象的標(biāo)準(zhǔn)名稱加入到了 JavaScript 中,所有環(huán)境都應(yīng)該支持該名稱。所有主流瀏覽器都支持它。
假設(shè)我們的環(huán)境是瀏覽器,我們將在這兒使用 “window”。如果你的腳本可能會用來在其他環(huán)境中運行,則最好使用 globalThis
。
全局對象的所有屬性都可以被直接訪問:
alert("Hello");
// 等同于
window.alert("Hello");
在瀏覽器中,使用 var
(而不是 let/const
!)聲明的全局函數(shù)和變量會成為全局對象的屬性。
var gVar = 5;
alert(window.gVar); // 5(成為了全局對象的屬性)
函數(shù)聲明(特指在主代碼流中具有 function
關(guān)鍵字的語句,而不是函數(shù)表達式)也有這樣的效果。
請不要依賴它!這種行為是出于兼容性而存在的?,F(xiàn)代腳本使用 JavaScript modules 所以不會發(fā)生這種事情。
如果我們使用 let
,就不會發(fā)生這種情況:
let gLet = 5;
alert(window.gLet); // undefined(不會成為全局對象的屬性)
如果一個值非常重要,以至于你想使它在全局范圍內(nèi)可用,那么可以直接將其作為屬性寫入:
// 將當(dāng)前用戶信息全局化,以允許所有腳本訪問它
window.currentUser = {
name: "John"
};
// 代碼中的另一個位置
alert(currentUser.name); // John
// 或者,如果我們有一個名為 "currentUser" 的局部變量
// 從 window 顯式地獲取它(這是安全的?。?alert(window.currentUser.name); // John
也就是說,一般不建議使用全局變量。全局變量應(yīng)盡可能的少。與使用外部變量或全局變量相比,函數(shù)獲取“輸入”變量并產(chǎn)生特定“輸出”的代碼設(shè)計更加清晰,不易出錯且更易于測試。
我們使用全局對象來測試對現(xiàn)代語言功能的支持。
例如,測試是否存在內(nèi)建的 ?Promise
? 對象(在版本特別舊的瀏覽器中不存在):
if (!window.Promise) {
alert("Your browser is really old!");
}
如果沒有(例如,我們使用的是舊版瀏覽器),那么我們可以創(chuàng)建 “polyfills”:添加環(huán)境不支持但在現(xiàn)代標(biāo)準(zhǔn)中存在的功能。
if (!window.Promise) {
window.Promise = ... // 定制實現(xiàn)現(xiàn)代語言功能
}
其中包括 JavaScript 的內(nèi)建方法,例如 “Array” 和環(huán)境特定(environment-specific)的值,例如 window.innerHeight
— 瀏覽器中的窗口高度。
globalThis
。……但是更常見的是使用“老式”的環(huán)境特定(environment-specific)的名字,例如 window
(瀏覽器)和 global
(Node.js)。
var
? 聲明的全局函數(shù)和變量會成為全局對象的屬性。
window.x
?。Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: