教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

JS全局變量和局部變量的區(qū)別

更新時間:2021年10月08日15時28分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

通過前面的學(xué)習(xí),我們知道變量需要先聲明后使用,但這并不意味著聲明變量后就可以在任意位置使用該變量。例如,在函數(shù)中聲明一個age變量,在函數(shù)外進(jìn)行訪問,就會出現(xiàn)age變量未定義的錯誤,示例代碼如下。

function info(){
	var age = 18;
}
info();
console.log (age);		//報(bào)錯,提示 age is not defined( age未定義)

從上述代碼可以看出,變量需要在它的作用范圍內(nèi)才可以被使用,這個作用范圍稱為變量的作用域。JavaScript根據(jù)作用域使用范圍的不同,將其劃分為全局作用域、函數(shù)作用域和塊級作用域(ES6提供的)。上述示例聲明的age變量只能在info()函數(shù)體內(nèi)才可以使用。

接下來我們針對JavaScript中不同作用域內(nèi)聲明的變量進(jìn)行介紹。

1.全局變量:不在任何函數(shù)內(nèi)聲明的變量(顯式定義)或在函數(shù)內(nèi)省略var聲明的變量(隱式定義)都稱為全局變量,在任何地方都可以訪問到的變量就是全局變量,全局變量所在的區(qū)域就是全局作用域。

2.局部變量:只在固定的代碼片段內(nèi)可訪問到的變量,最常見的例如函數(shù)內(nèi)部的變量,就是局部變量。局部變量所在的區(qū)域就是局部作用域(函數(shù)作用域)。

3.塊級變量:ES6提供的let關(guān)鍵字聲明的變量稱為塊級變量,僅在“{}”中間有效,如if、for或while語句等。

對于初學(xué)者來說,重點(diǎn)是理解全局變量和局部變量的區(qū)別,而塊級變量和let關(guān)鍵字屬于ES6的新增內(nèi)容。

全局變量和局部變量

下面我們通過代碼演示全局變量和局部變量的區(qū)別,具體代碼如下。

//全局作用域
var num = 10;
//全局變量
function fn(){
	//局部作用域
	var num = 20;	//局部變量
	console.log(num);	//輸出局部變量num的值,輸出結(jié)果:20
}
fn();
console.log(num);	//輸出全局變量10的值,輸出結(jié)果:10

在上述代碼中,全局變量num和局部變量num雖然名稱相同但具它們百不影響,在fn()函數(shù)外獲取的num的值為10,在fn()函數(shù)內(nèi)獲取到的num的值為20。需要注意的是,函數(shù)中的變量如果省略var關(guān)鍵字,它會白動向上級作田城杏找變量,一直找到全局作用域?yàn)橹埂J纠a如下。

function fn(){
	num2=20;
}
fn();
console.log(num2);	//輸出結(jié)果:20

在上述代碼中,fn()函數(shù)中的“num2 = 20:”使得程序首先會在fn()函數(shù)的局部作用域中查找是否存在num2變量,如果不存在,則到上級作用域,也就是全局作用域中查找。由于在全局作用域中也沒有num2變量,此時就會在全局作用域下創(chuàng)建一個全局變量num2。

通過以上對比可以看出,在全局作用域下,添加或省略var關(guān)鍵字都可以聲明全局變量;而在函數(shù)中,添加var關(guān)鍵字聲明的變量是局部變量,省略var關(guān)鍵字時,如果變量在當(dāng)前作用域下不存在,會自動向上級作用域查找變量。局部變量只能在函數(shù)內(nèi)部使用,函數(shù)的形參也屬于局部變量。從執(zhí)行效率來說,全局變量在瀏覽器關(guān)閉頁面的時候才會銷毀,比較占用內(nèi)存資源;而局部變量在函數(shù)執(zhí)行完成后就會銷毀,比較節(jié)約內(nèi)存資源。



猜你喜歡:

var、let、const聲明變量的區(qū)別

JS變量教程:JavaScript中變量的用法詳解

變量是什么?JavaScript變量的命名聲明與賦值講解

JavaScript變量命名規(guī)范介紹

傳智教育HTML&JS+前端高手班

0 分享到:
和我們在線交談!