javascript變量聲明實(shí)例分析
本文實(shí)例講述了javascript變量聲明的方法。分享給大家供大家參考。具體分析如下:
js中使用一個(gè)變量之前應(yīng)當(dāng)先聲明。變量使用關(guān)鍵字var來(lái)聲明。
如果未在var聲明語(yǔ)句中給變量指定初始值,則該變量值為undefined。
不用在聲明變量時(shí)指定變量類(lèi)型,js變量可以是任意數(shù)據(jù)類(lèi)型。
使用var語(yǔ)句重復(fù)聲明變量是合法且無(wú)害的。如果重復(fù)聲明帶有初始化器,則就和簡(jiǎn)單的賦值語(yǔ)句沒(méi)啥區(qū)別。
如果試圖讀取一個(gè)沒(méi)有聲明的變量,則js會(huì)報(bào)錯(cuò)。在ECMAScript5嚴(yán)格模式下,給一個(gè)沒(méi)有聲明的變量賦值也會(huì)報(bào)錯(cuò);然而從歷史上來(lái)說(shuō),在非嚴(yán)格模式下,如果給一個(gè)未聲明變量賦值,js實(shí)際上會(huì)給全局對(duì)象創(chuàng)建一個(gè)同名屬性,且貌似它工作起來(lái)像一個(gè)正確聲明的全局變量。這意味著你可以?xún)e幸不聲明全局變量,但這是一個(gè)壞習(xí)慣會(huì)造成很多bug,最好始終使用var來(lái)聲明變量。
在函數(shù)體內(nèi),同名的局部變量會(huì)覆蓋全局變量。
盡管全局作用域?qū)懘a可以不寫(xiě)var語(yǔ)句,但聲明局部變量時(shí)必須使用var語(yǔ)句,參考如下代碼:
scope = "global";
function foo(){
scope="local"
//fk!我們剛剛修改了全局變量?。?!
}
在類(lèi)似C語(yǔ)言的編程語(yǔ)言中,花括號(hào)中每一段代碼都有各自的作用域,且變量在聲明它們代碼段之外是不可見(jiàn)的,我們稱(chēng)之為塊級(jí)作用域(block scope);而js中沒(méi)有塊級(jí)作用域,而是取而代之的使用了函數(shù)作用域(function scope):變量在聲明它們的函數(shù)體以及這個(gè)函數(shù)體嵌套的任意函數(shù)體內(nèi)都是有定義的(無(wú)論是內(nèi)嵌套還是外嵌套?)
js的函數(shù)作用域指在函數(shù)內(nèi)聲明的所有變量在函數(shù)體內(nèi)始終是可見(jiàn)的,這意味著變量在聲明前甚至可以使用了。js的這個(gè)特性非正式的稱(chēng)為聲明提前(hoisting),即js函數(shù)里聲明的所有變量(但沒(méi)有賦值)都被“提前”至函數(shù)體的頂部。
var scope = "global";
function f(){
console.log(scope);
//輸出"undefined"而不是"global"
var scope = "local";
//變量在這里賦初始值,但變量在函數(shù)體內(nèi)任何地方均是有定義的
console.log(scope);
//輸出"local"
以上代碼等價(jià)于:
function f(){
var scope;
console.log(scope);
scope = "local";
console.log(scope);
}
當(dāng)聲明一個(gè)js全局變量時(shí),實(shí)際上定義了全局對(duì)象的一個(gè)屬性。
當(dāng)用var聲明一個(gè)變量時(shí),創(chuàng)建的這個(gè)屬性時(shí)不可配置的,即無(wú)法用delete運(yùn)算符刪除;但當(dāng)你沒(méi)有使用嚴(yán)格模式并給一個(gè)未聲明的變量賦值的話(huà),js會(huì)自動(dòng)創(chuàng)建一個(gè)全局變量,以這種方式創(chuàng)建的變量是全局對(duì)象的正常可配置屬性,是可以刪除的:
var x = 1; y = 2; this.z = 3; //同上 delete x; //返回false,無(wú)法刪除變量 delete y; //返回true,變量被刪除 delete this.z //同上
希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
js項(xiàng)目中添加ts支持實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了如何在js項(xiàng)目中添加ts支持實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
不刷新網(wǎng)頁(yè)就能鏈接新的js文件方法總結(jié)
在本篇文章里小編給大家整理的是關(guān)于不刷新網(wǎng)頁(yè)就能鏈接新的js文件方法總結(jié),需要的朋友們參考下。2020-03-03
JS實(shí)現(xiàn)用戶(hù)注冊(cè)界面功能
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)用戶(hù)注冊(cè)界面功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Javascript將字符串日期格式化為yyyy-mm-dd的方法
日期格式化相信對(duì)于大家來(lái)說(shuō)再熟悉不過(guò),最近工作中自己利用Javascript就寫(xiě)了一個(gè),現(xiàn)在將實(shí)現(xiàn)的代碼分享給大家,希望對(duì)有需要的朋友們能有所幫助,感興趣的朋友們下面來(lái)一起看看吧。2016-10-10
JavaScript中push(),join() 函數(shù) 實(shí)例詳解
本文通過(guò)實(shí)例給大家介紹了JavaScript中push(),join() 的知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
ExpressJS使用express-ws的實(shí)例詳解
這篇文章主要介紹了ExpressJS使用express-ws的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09

