函數(shù)的默認(rèn)參數(shù)
JS函數(shù)參數(shù)的默認(rèn)值都是undefined枣接,寫(xiě)默認(rèn)參數(shù)的方法有兩種证舟,代碼如下:
以前常用方法(ES5):
function sum(a,b){
b=(typeof b !== 'undefined') ? b:1;
return a*b;
}
sum(5,2);//10
sum(5);//5
現(xiàn)在可用方法:
function sum(a,b=1){
return a*b;
}
sum(5,2);//10
sum(5);//5
以上兩種方法都是將b的默認(rèn)值設(shè)置為1硕旗,當(dāng)傳入形參為空或者沒(méi)有傳入形參時(shí),默認(rèn)b的值為1
注:位于默認(rèn)參數(shù)后非默認(rèn)參數(shù)女责,參數(shù)設(shè)置仍然是從左往右漆枚,覆蓋默認(rèn)參數(shù),即使參數(shù)沒(méi)有默認(rèn)值
示例:
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
let定義
起源:let的出現(xiàn)是為了解決ES6之前老版本標(biāo)準(zhǔn)中的兩個(gè)問(wèn)題
- 在JavaScript中如果定義了同名的變量抵知,那么后定義的變量會(huì)覆蓋前面定義的變量
- 在老版本標(biāo)準(zhǔn)中JavaScript可以先使用變量再定義墙基,并且不會(huì)報(bào)錯(cuò)
let不能定義同名變量,一旦定義在ES6中就會(huì)報(bào)錯(cuò)刷喜,而且let不能先調(diào)用再定義
全局變量
定義:在整個(gè)頁(yè)面任何地方都可以調(diào)用的變量就是全局變量
寫(xiě)法:
- 寫(xiě)在JavaScript的{}之外的變量
- 在塊級(jí)作用域中用var定義的變量
- 在局部作用于或者塊級(jí)作用域中省略var或者let的變量
局部變量
定義:只能在固定代碼塊中被使用的變量残制,外部不能使用局部作用域中定義的局部變量
寫(xiě)法:在函數(shù)內(nèi)部,寫(xiě)在JavaScript函數(shù)后面的{}中的變量就是局部變量
注:局部變量?jī)?yōu)先于全局變量
塊級(jí)變量
定義:任何一對(duì){}中的代碼集都是屬于一個(gè)塊掖疮,在塊級(jí)作用域中使用let聲明的變量
寫(xiě)法:在{}中使用let聲明
垃圾回收機(jī)制
- 在JavaScript的函數(shù)中初茶,每一個(gè)局部變量都會(huì)占著一定的空間,用來(lái)存儲(chǔ)他們的值浊闪,一旦函數(shù)執(zhí)行結(jié)束恼布,局部變量就沒(méi)有存在的意義了,所以JavaScript就會(huì)通過(guò)垃圾回收機(jī)制來(lái)銷(xiāo)毀這些局部變量搁宾,達(dá)到自動(dòng)釋放他們所占的內(nèi)存空間的目的折汞,減小瀏覽器的運(yùn)行負(fù)擔(dān)
- 如果想保留局部變量的值,可以采用return返回或者利用全局變量來(lái)保存盖腿,所以如果一個(gè)函數(shù)中的變量是局部變量而運(yùn)行完之后沒(méi)有return保存數(shù)據(jù)爽待,當(dāng)網(wǎng)頁(yè)要輸出的時(shí)候就會(huì)出現(xiàn)沒(méi)有這個(gè)變量的情況,導(dǎo)致瀏覽器報(bào)錯(cuò)