js通過(guò)var定義全局變量與在window對(duì)象上直接定義屬性的區(qū)別說(shuō)明
js var定義全局變量與在window對(duì)象上直接定義屬性區(qū)別
關(guān)于window
一、所有 JavaScript 全局對(duì)象、函數(shù)以及變量均自動(dòng)成為 window 對(duì)象的成員。
二、全局變量是 window 對(duì)象的屬性。
三、全局函數(shù)是 window 對(duì)象的方法。
所有在全局作用域中聲明的變量、函數(shù)都會(huì)變成window對(duì)象的屬性和方法。如:
var name = "xiaomi"; console.log(window.name);//"xiaomi"
區(qū)別一
全局變量不能通過(guò)delete刪除,而window屬性上定義的變量可以通過(guò)delete刪除:
var num1=123; window.num2=456; delete num1; delete num2; console.log(num1); ?//123 console.log(num2); ?//num2 is not defined
全局變量num1之所以不能通過(guò)delete刪除,是因?yàn)橥ㄟ^(guò)var語(yǔ)句添加的全局變量有一個(gè)configurable屬性,其默認(rèn)值為false,如下,所以這樣定義的屬性不可以通過(guò)delete刪除。
var num1=123; window.num2=456; Object.getOwnPropertyDescriptor(window, "num1"); //Object {value: 123, writable: true, enumerable: true, configurable: false} Object.getOwnPropertyDescriptor(window, 'num2'); //Object {value: 456, writable: true, enumerable: true, configurable: true}
區(qū)別二
嘗試訪問(wèn)未聲明的變量會(huì)報(bào)錯(cuò),xxx is not defined。
但是通過(guò)查詢window查詢,可以知道某個(gè)可能未聲明的變量是否存在,不會(huì)報(bào)錯(cuò),只會(huì)顯示undefined。
console.log(num1); // undefined var num1=123; console.log(num2); // ReferenceError: a is not defined window.num2=456;
這一點(diǎn)可以用預(yù)編譯解釋,var聲明的變量會(huì)提升聲明到頂部。
區(qū)別三
在函數(shù)中使用var定義的變量是局部變量。
有時(shí)想要在外部也訪問(wèn)到函數(shù)里面的變量,就需要定義window對(duì)象屬性。
function () { ?? ?var num1 = 123; ?? ?window.num2 = 456; } console.log(num1); //num1 is not defined console.log(num2); //456
js中定義的全局變量,局部變量
關(guān)于變量和參數(shù)問(wèn)題
var a ?= 2; //全局變量? function func() { ? ? var a = 1; ?//局部變量? ?? ? ? ?a = 2; ? ? //全局變量? }
函數(shù)外面定義的變量是全局變量,函數(shù)內(nèi)可以直接使用。
在函數(shù)內(nèi)部沒(méi)有使用var定義的=變量則為全局變量,
*在函數(shù)內(nèi)使用var關(guān)鍵字定義的變量是局部變量,即出了函數(shù)外邊無(wú)法獲取。
js函數(shù)定義的參數(shù)沒(méi)有默認(rèn)值,(形參的默認(rèn)值在之前只有新版火狐支持,目前新版的chrome瀏覽器也可以支持)
JS中聲明全局變量主要分為顯式聲明或者隱式聲明下面分別介紹。
聲明方式一:
使用var(關(guān)鍵字)+變量名(標(biāo)識(shí)符)的方式在function外部聲明,即為全局變量,否則在function聲明的是局部變量。該方式即為顯式聲明詳細(xì)如下:
? var test = 5;//全局變量? ? function a(){? ? ? var a = 3;//局部變量? ? ? alert(a);? ? }? ? function b(){? ? ? alert(test);? ? }? ? //a();//調(diào)用a方法,那么方法里面的內(nèi)容才會(huì)執(zhí)行? ? //b();//同上?
聲明方式二:
沒(méi)有使用var,直接給標(biāo)識(shí)符test賦值,這樣會(huì)隱式的聲明了全局變量test。即使該語(yǔ)句是在一個(gè)function內(nèi),當(dāng)該function被執(zhí)行后test變成了全局變量。
? ? test = 5;//全局變量? ? ? function a(){? ? ? ? aa = 3;//也是全局變量? ? ? ? alert(test);? ? ? }? ? ? //a(); ?//輸出5? ? ? //alert(aa);//這里也可以方法a()方法里面的變量,因?yàn)閍a是全局變量?
聲明方式三:
使用window全局對(duì)象來(lái)聲明,全局對(duì)象的屬性對(duì)應(yīng)也是全局變量,詳細(xì)如下:
<script>? ? window.test = 50;? ? alert(test);//輸出50? </script>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何判斷微信內(nèi)置瀏覽器(通過(guò)User Agent實(shí)現(xiàn))
在進(jìn)行微信公眾賬號(hào)開發(fā)的時(shí)候,需要知道當(dāng)前的瀏覽器是微信內(nèi)置的瀏覽器,那么如何判斷呢?這是就只有通過(guò)瀏覽器的User Agent來(lái)進(jìn)行判斷了2014-09-09微信小程序?qū)崿F(xiàn)點(diǎn)餐小程序左側(cè)滑動(dòng)菜單
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)點(diǎn)餐小程序左側(cè)滑動(dòng)菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07JS實(shí)現(xiàn)的頁(yè)面自定義滾動(dòng)條效果
這篇文章主要介紹了JS實(shí)現(xiàn)的頁(yè)面自定義滾動(dòng)條效果,涉及JavaScript結(jié)合css設(shè)置頁(yè)面滾動(dòng)條樣式的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10JavaScript判斷數(shù)組的方法總結(jié)與推薦
這篇文章主要給大家介紹了關(guān)于JavaScript判斷數(shù)組方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02myFocus slide3D v1.1.0 使用方法與下載
myFocus slide3D v1.1.0 使用方法與下載,需要的朋友可以參考下。2011-01-01JavaScript人臉識(shí)別技術(shù)及臉部識(shí)別JavaScript類庫(kù)Tracking.js
人臉識(shí)別的JavaScript程序包是Face Detection,它是由Jay Salvat和Liu Liu開發(fā)的。它是一個(gè)標(biāo)準(zhǔn)的jQuery插件,通過(guò)對(duì)提供的圖片進(jìn)行分析,返回所有找到的臉部圖像的坐標(biāo),感興趣的朋友跟著小編一起學(xué)習(xí)js人臉識(shí)別技術(shù)及臉部識(shí)別JavaScript類庫(kù)Tracking.js吧2015-09-09bootstrap datetimepicker實(shí)現(xiàn)秒鐘選擇下拉框
這篇文章主要為大家詳細(xì)介紹了bootstrap datetimepicker添加秒鐘選擇下拉框的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01