溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

javascript中作用域指的是什么

發(fā)布時(shí)間:2022-01-19 09:04:18 來(lái)源:億速云 閱讀:152 作者:kk 欄目:web開(kāi)發(fā)

javascript中作用域指的是什么,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

在javascript中,作用域是變量(對(duì)象、函數(shù))的可訪(fǎng)問(wèn)范圍,是變量在腳本代碼中的可讀、寫(xiě)的有效范圍;作用域可以控制變量的可見(jiàn)性和生命周期。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

幾乎所有的語(yǔ)言都有作用域的概念,簡(jiǎn)單的說(shuō),作用域(scope)就是變量的可訪(fǎng)問(wèn)范圍,即作用域控制變量的可見(jiàn)性和生命周期。

在 JavaScript 中, 對(duì)象和函數(shù)同樣也是變量。

在 ECMAScript6 之前,變量的作用域主要分為全局作用域、局部作用域(也稱(chēng)函數(shù)作用域)兩種;在 ECMAScript6 及其之后,變量的作用域主要分為全局作用域、局部作用域和塊級(jí)作用域這 3 種。

相應(yīng)作用域的變量分別稱(chēng)為全局變量、局部變量和塊級(jí)變量。

  • 全局變量聲明在所有函數(shù)之外;

  • 局部變量是在函數(shù)體內(nèi)聲明的變量或者是函數(shù)的命名參數(shù);

  • 塊級(jí)變量是在塊中聲明的變量,只在塊中有效。

變量的作用域跟聲明方式有很密切的關(guān)系。使用 var 聲明的變量的作用域有全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域;使用 let 和 const 聲明的變量有全局作用域、局部作用域和塊級(jí)作用域。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
	</head>
	<body>
		<script>
			var v1 = "JavaScript"; //全局變量
			let v2 = "JScript"; //全局變量
			let v3 = "Script"; //全局變量
			scopeTest(); //調(diào)用函數(shù)
			function scopeTest() {
				var lv = "aaa"; //局部變量
				var v1 = "bbb"; //局部變量
				let v2 = "ccc"; //局部變量
				if (true) {
					let lv = "123"; //塊級(jí)變量
					console.log("塊內(nèi)輸出的lv = " + lv); //123
				}
				console.log("函數(shù)體內(nèi)輸出的lv = " + lv); //aaa
				console.log("函數(shù)體內(nèi)輸出的v1 = " + v1); //bbb
				console.log("函數(shù)體內(nèi)輸出的v2 = " + v2); //ccc
				console.log("函數(shù)體內(nèi)輸出的v3 = " + v3); //Script
				//v4為全局變量,賦值在后面,因而值為undefined
				console.log("函數(shù)體內(nèi)輸出的v4 = " + v4);
			}
			var v4 = "VBScript"; //全局變量
			console.log("函數(shù)體外輸出的lv = " + lv); //① 報(bào)ReferenceError錯(cuò)誤
			console.log("函數(shù)體外輸出的v1 = " + v1); //JavaScript
			console.log("函數(shù)體外輸出的v2 = " + v2); //JScript
			console.log("函數(shù)體外輸出的v3 = " + v3); //Script
			console.log("函數(shù)體外輸出的v3 = " + v4); //VBScript
		</script>
	</body>
</html>

上述腳本代碼分別聲明了 4 個(gè)全局變量、3 個(gè)局部變量和 1 個(gè)塊級(jí)變量。在 scopeTest 函數(shù)體外,變量 v1、v2、v3 和 v4 為全局變量;在 scopeTest 函數(shù)體內(nèi),lv、v2是全局變量;在 if 判斷塊中,lv 是塊級(jí)變量。

我們看到,局部變量 v1 和 v2 與全局變量 v1 和 v2 同名,在 scopeTest 函數(shù)體內(nèi),局部變量 v1 和 v2 有效,因而在函數(shù)體這 2 個(gè)變量的輸出結(jié)果分別為“bbb”和“ccc”;在函數(shù)體外,全局變量 v1 和 v2 有效,因而在函數(shù)體外,這 2 個(gè)變量的輸出結(jié)果分別為“JavaScript”和“JScript”。

另外,塊級(jí)變量 lv 和局部變量 lv 同名,在 if 判斷塊中,塊級(jí)變量 lv 有效,因而在塊中輸出的結(jié)果為“123”,而在塊外,局部變量 lv 有效,lv 變量的輸出結(jié)果為“aaa”。

另外,全局變量 v3 和 v4 在函數(shù)體中沒(méi)有被覆蓋,因而輸出的是全局變量的值,所以 v3 在函數(shù)體內(nèi)和體外的輸出結(jié)果都為“Script”,而 v4 變量的賦值在函數(shù)調(diào)用的后面,因而在函數(shù)體中的 v4 輸出結(jié)果為“undefined”,而在函數(shù)體外的輸出是在聲明之后,所以結(jié)果為“VBScript”。lv 是局部變量,因而在函數(shù)體外訪(fǎng)問(wèn)會(huì)報(bào)“ReferenceError”錯(cuò)誤。

上述代碼在 Chrome 瀏覽器中運(yùn)行后,打開(kāi)瀏覽器的控制臺(tái),可以看到下圖所示的輸出結(jié)果。

javascript中作用域指的是什么

28行代碼報(bào)錯(cuò)的原因:

lv 變量為局部變量,離開(kāi)函數(shù)后無(wú)效。將這行代碼注釋后再運(yùn)行,此時(shí)打開(kāi)瀏覽器控制臺(tái)可看到:

javascript中作用域指的是什么

JavaScript有什么特點(diǎn)

1、js屬于一種解釋性腳本語(yǔ)言;2、在絕大多數(shù)瀏覽器的支持下,js可以在多種平臺(tái)下運(yùn)行,擁有著跨平臺(tái)特性;3、js屬于一種弱類(lèi)型腳本語(yǔ)言,對(duì)使用的數(shù)據(jù)類(lèi)型未做出嚴(yán)格的要求,能夠進(jìn)行類(lèi)型轉(zhuǎn)換,簡(jiǎn)單又容易上手;4、js語(yǔ)言安全性高,只能通過(guò)瀏覽器實(shí)現(xiàn)信息瀏覽或動(dòng)態(tài)交互,從而有效地防止數(shù)據(jù)的丟失;5、基于對(duì)象的腳本語(yǔ)言,js不僅可以創(chuàng)建對(duì)象,也能使用現(xiàn)有的對(duì)象。

關(guān)于javascript中作用域指的是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guā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)容。

AI