您好,登錄后才能下訂單哦!
JavaScript中不同函數(shù)可以定義相同變量名嗎?可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
JavaScript中不同的函數(shù)中可以定義相同的變量名,因?yàn)槭窃诤瘮?shù)體內(nèi)部定義的,屬于局部變量,外界是訪問(wèn)不到的。所以是可以的。
舉例:
var a = 1;
function b(){a = 10;
return;function a(){
console.log(a);}
}b();
console.log(a);
這題打印出a的值為多少呢?可能會(huì)有很多的同學(xué)認(rèn)為打印出的值為10,但其實(shí)并不是,為什么呢?
誤區(qū)1:變量提升
我想大家都明白,在執(zhí)行函數(shù)b的時(shí)候,由于其內(nèi)部有一句a=10,前面并沒(méi)有var,所以在執(zhí)行完函數(shù)b之后,認(rèn)為變量a提升為全局變量,并且10這個(gè)值覆蓋了之前的1。所以打印出的值為10。我想的話這是多數(shù)新手的思路。
這里有個(gè)知識(shí)點(diǎn):
顯示聲明:var a = 1;
隱式聲明:a = 1;
隱式聲明會(huì)變量提升為全局變量
誤區(qū)2:不知道函數(shù)聲明也是有提升的
多數(shù)新手認(rèn)為在執(zhí)行函數(shù)b的時(shí)候,js執(zhí)行代碼自上往下,執(zhí)行到return的時(shí)候退出函數(shù),不再執(zhí)行函數(shù)a,所以認(rèn)為這個(gè)函數(shù)a根本不起作用。
拓展知識(shí):
全局變量和局部變量的區(qū)別如下:
1. 作用域不同:全局變量的作用域?yàn)檎麄€(gè)程序,而局部變量的作用域?yàn)楫?dāng)前函數(shù)或循環(huán)等
2. 內(nèi)存存儲(chǔ)方式不同:全局變量存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū)中,局部變量存儲(chǔ)在棧區(qū)
3. 生命期不同:全局變量的生命期和主程序一樣,隨程序的銷(xiāo)毀而銷(xiāo)毀,局部變量在函數(shù)內(nèi)部或循環(huán)內(nèi)部,隨函數(shù)的退出或循環(huán)退出就不存在了
4. 使用方式不同:全局變量在聲明后程序的各個(gè)部分都可以用到,但是局部變量只能在局部使用。函數(shù)內(nèi)部會(huì)優(yōu)先使用局部變量再使用全局變量。
局部變量可以與全局變量重名,但是局部變量會(huì)屏蔽全局變量。
全局變量是編程術(shù)語(yǔ)中的一種,源自于變量之分。
變量分為局部與全局,局部變量又可稱(chēng)之為內(nèi)部變量。由某對(duì)象或某個(gè)函數(shù)所創(chuàng)建的變量通常都是局部變量,只能被內(nèi)部引用,而無(wú)法被其它對(duì)象或函數(shù)引用。
全局變量既可以是某對(duì)象函數(shù)創(chuàng)建,也可以是在本程序任何地方創(chuàng)建。全局變量是可以被本程序所有對(duì)象或函數(shù)引用。
看完上述內(nèi)容,你們對(duì)JavaScript中不同函數(shù)可以定義相同變量名有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。