JScript中的'var'定義變量的作用域
更新時(shí)間:2007年03月08日 00:00:00 作者:
都不記得是什么時(shí)候看的JScript的語(yǔ)法教程了,里面說(shuō)在聲明變量時(shí)忽略var關(guān)鍵字是完全合法的。當(dāng)時(shí)也因?yàn)橛X(jué)得JavaScript是loosely-typed的語(yǔ)言,所以var可能真的就是個(gè)擺設(shè)。但是事實(shí)常常又證明想當(dāng)然的結(jié)果是不可靠的。
看看下面這幾個(gè)例子的結(jié)果就知道問(wèn)題了:
No.1
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
No.2
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
No.3
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
這三個(gè)例子的執(zhí)行結(jié)果分別是:
Results#region Results
No.1
0
undefined
No.2
0
1
No.3
0
undefined
#endregion
原來(lái)JavaScript的變量也是有作用域的,只是它非常的籠統(tǒng),就分為全局變量和函數(shù)變量。在第二個(gè)例子中得到0和1,是因?yàn)樗械淖兞慷际侨肿兞?,而且那個(gè)語(yǔ)句塊一共就定義了兩個(gè)變量。而第一個(gè)第三的函數(shù)外全局變量,確實(shí)說(shuō)明var關(guān)鍵字有沒(méi)有都沒(méi)有關(guān)系。而函數(shù)內(nèi)的var關(guān)鍵字就很關(guān)鍵了,它說(shuō)明第二個(gè)var01是函數(shù)內(nèi)的變量,所以在初始化var01前輸出自然就是'undefined'了。
那么函數(shù)里面是不是就屏蔽掉了全局的var01了呢?我們知道在C/C++可以使用::去訪問(wèn)全局變量,那么JavaScript可不可以呢?這里其實(shí)我們只要明白了全局變量到底是什么東西,就好弄了。原來(lái)全局變量都是動(dòng)態(tài)添加到Window對(duì)象的實(shí)例window上的屬性而以,所以我們只要在函數(shù)內(nèi)用:document.write(window.var01);就可以取到其值1了。同時(shí)在這個(gè)上下文中,function內(nèi)的this也是指向的window實(shí)例,我們也可以把引用寫成:this.var01。
By the way, 重看JScript教程時(shí),它說(shuō)變量只能是[a-zA-Z_]+[a-zA-Z0-9_]*格式,可是'$'卻也可以作為變量名字符,而且還可以用在開頭,比如:$1234,更甚至于:$$$ 也是合法的變量名,faint。
看看下面這幾個(gè)例子的結(jié)果就知道問(wèn)題了:
No.1
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
No.2
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
No.3
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
這三個(gè)例子的執(zhí)行結(jié)果分別是:
復(fù)制代碼 代碼如下:
Results#region Results
No.1
0
undefined
No.2
0
1
No.3
0
undefined
#endregion
原來(lái)JavaScript的變量也是有作用域的,只是它非常的籠統(tǒng),就分為全局變量和函數(shù)變量。在第二個(gè)例子中得到0和1,是因?yàn)樗械淖兞慷际侨肿兞?,而且那個(gè)語(yǔ)句塊一共就定義了兩個(gè)變量。而第一個(gè)第三的函數(shù)外全局變量,確實(shí)說(shuō)明var關(guān)鍵字有沒(méi)有都沒(méi)有關(guān)系。而函數(shù)內(nèi)的var關(guān)鍵字就很關(guān)鍵了,它說(shuō)明第二個(gè)var01是函數(shù)內(nèi)的變量,所以在初始化var01前輸出自然就是'undefined'了。
那么函數(shù)里面是不是就屏蔽掉了全局的var01了呢?我們知道在C/C++可以使用::去訪問(wèn)全局變量,那么JavaScript可不可以呢?這里其實(shí)我們只要明白了全局變量到底是什么東西,就好弄了。原來(lái)全局變量都是動(dòng)態(tài)添加到Window對(duì)象的實(shí)例window上的屬性而以,所以我們只要在函數(shù)內(nèi)用:document.write(window.var01);就可以取到其值1了。同時(shí)在這個(gè)上下文中,function內(nèi)的this也是指向的window實(shí)例,我們也可以把引用寫成:this.var01。
By the way, 重看JScript教程時(shí),它說(shuō)變量只能是[a-zA-Z_]+[a-zA-Z0-9_]*格式,可是'$'卻也可以作為變量名字符,而且還可以用在開頭,比如:$1234,更甚至于:$$$ 也是合法的變量名,faint。
您可能感興趣的文章:
- 在Javascript中 聲明時(shí)用"var"與不用"var"的區(qū)別
- javascript定義變量時(shí)加var與不加var的區(qū)別
- JavaScript中var關(guān)鍵字的使用詳解
- js for循環(huán),為什么一定要加var定義i變量
- JavaScript中const、var和let區(qū)別淺析
- 淺析JavaScript中var that=this
- Javascript var變量隱式聲明方法
- 關(guān)于JavaScript中var聲明變量作用域的推斷
- javascript定義變量時(shí)有var和沒(méi)有var的區(qū)別探討
- JavaScript ES6中const、let與var的對(duì)比詳解
- JavaScript中var的重要性實(shí)例分析
相關(guān)文章
js 返回時(shí)間戳所對(duì)應(yīng)的具體時(shí)間
返回unix時(shí)間戳所對(duì)應(yīng)的具體時(shí)間的代碼2010-07-07解決微信小程序調(diào)用moveToLocation失效問(wèn)題【超簡(jiǎn)單】
這篇文章主要介紹了解決微信小程序調(diào)用moveToLocation失效問(wèn)題,解決方法超級(jí)簡(jiǎn)單,需要的朋友可以參考下2019-04-04TypeScript中枚舉類型的理解與應(yīng)用場(chǎng)景
如 TypeScript 官方文檔所說(shuō),枚舉類型是對(duì) JavaScript 標(biāo)準(zhǔn)數(shù)據(jù)類型集的擴(kuò)充,所以下面這篇文章主要給大家介紹了關(guān)于TypeScript中枚舉類型的理解與應(yīng)用場(chǎng)景的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09jQuery鼠標(biāo)懸浮鏈接彈出跟隨圖片實(shí)例代碼
這篇文章主要介紹了jQuery鼠標(biāo)懸浮鏈接彈出跟隨圖片實(shí)例代碼,需要的朋友可以參考下2016-01-01利用ES6實(shí)現(xiàn)單例模式及其應(yīng)用詳解
單例是在程序設(shè)計(jì)非?;A(chǔ)的東西,這篇文章主要給大家介紹了關(guān)于利用ES6實(shí)現(xiàn)單例模式及其應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12javascript 簡(jiǎn)練的幾個(gè)函數(shù)
看CSDN上別人的代碼,感覺(jué)比較精煉,拿來(lái)主義,需要的朋友可以看下。2009-08-08