很多新手在學(xué)習(xí)JavaScript時(shí),會(huì)被告知在聲明變量時(shí)必須加上var關(guān)鍵字。但是,在實(shí)際編程中,一些程序員并不總是這樣做,而是直接將變量名賦值給一個(gè)尚未被聲明的變量。這種行為被稱為不加var。
雖然不加var會(huì)使代碼看起來更簡潔,但在實(shí)際使用中,這種行為會(huì)帶來很多問題。例如,未聲明的變量會(huì)在全局對象中創(chuàng)建,這樣就會(huì)污染全局命名空間,導(dǎo)致變量名沖突。而且,由于不少瀏覽器的JavaScript引擎允許這種行為,所以這種情況下,可以發(fā)現(xiàn)充滿不穩(wěn)定性的行為。
下面是一個(gè)例子,清晰地展示了使用不加var聲明變量的一個(gè)問題:
x = 1; console.log(window.x); // 輸出了1
上面這段代碼實(shí)際上暴露了一個(gè)漏洞。如果將該代碼放在一個(gè)函數(shù)中,這個(gè)函數(shù)的全局范圍內(nèi)的所有代碼都可以訪問x變量。
事實(shí)上,這個(gè)漏洞不只是端上出現(xiàn)的問題。在一些CSS框架和流行的JavaScript庫中,也會(huì)出現(xiàn)這種情況,從而引發(fā)復(fù)雜的問題。因此,可以說,在編寫JavaScript代碼時(shí),一定要注意加上var關(guān)鍵字,以避免這種問題。
所以如果你想編寫清晰、可讀性強(qiáng)的代碼,就不應(yīng)該使用不加var聲明變量的方式。var顯然可以讓代碼更加明確和可操作性。當(dāng)然,如果糟糕的代碼可以成功運(yùn)行,那就追求它更糟糕的一面,按照自己的想法來編寫,但這樣的代碼會(huì)使你的時(shí)間付出得不償失,實(shí)際上只會(huì)增加維護(hù)成本,而根本不會(huì)在性能和安全方面提供任何好處。在JavaScript編程中,正確性和可讀性是很重要的,總體來說,var關(guān)鍵字很能幫助你實(shí)現(xiàn)這兩個(gè)目標(biāo)。