JavaScript?ES新特性塊級(jí)作用域
前言:
在學(xué)習(xí)塊級(jí)作用域之前需要我們對(duì)作用域有個(gè)了解,所謂的作用域就是代碼當(dāng)中的某個(gè)成員起作用的范圍。
1.塊級(jí)作用域是什么
所謂的塊級(jí)作用域,就是該變量只能在聲明時(shí)的代碼塊或者子代碼塊中使用。在ECMAScript 2015以前的版本中是不存在塊級(jí)作用域的,而ECMAScript 2015提供的let關(guān)鍵字,使JavaScript出現(xiàn)了塊級(jí)作用域,示例代碼如下所示
/*
* 塊級(jí)作用域只能使用 let 關(guān)鍵字
* let關(guān)鍵字不僅可以聲明塊級(jí)作用域, 還可以用在全局作用域和函數(shù)作用域
*/
// 全局作用域
let a = 100; // 全局變量
(function () {
// 函數(shù)作用域
let b = 200; // 局部變量
})()
if (true) {
// 塊級(jí)作用域
let c = 300; // 局部變量
}
console.log(a); // 100
console.log(b); // 拋出異常
console.log(c); // 拋出異常
2.為什么需要塊級(jí)作用域
ECMAScript 5只存在全局作用域和函數(shù)作用域,沒有塊級(jí)作用域。這種情況出現(xiàn)一些問(wèn)題:
局部變量可能會(huì)覆蓋全局變量
var v = 100;
(function(){
console.log(v); // undefined
var v = 200;
})
在循環(huán)體中用于計(jì)數(shù)的變量泄露為全局變量
// 定義一個(gè)循環(huán)體
for (var v = 0; v < 10; v++) {
console.log("這是一個(gè) for 循環(huán)"); // 這是一個(gè) for 循環(huán) * 10
}
console.log(v); // 10
在循環(huán)完畢之后如果不手動(dòng)釋放此變量,其生命周期跟隨此腳本生存,占用內(nèi)存。
3.與函數(shù)聲明
ECMAScript5標(biāo)準(zhǔn)規(guī)定函數(shù)的聲明只能在全局作用域和函數(shù)作用域中,不能再塊級(jí)作用域中聲明。
情況一:
if (true) {
function f() {}
}
情況二:
try {
function f() {}
} catch(e) {
// ...
}
上面兩種函數(shù)聲明,根據(jù)ECMAScript5的規(guī)定都是非法的。
而 ECMAScript 2015標(biāo)準(zhǔn)規(guī)定在塊級(jí)作用域聲明函數(shù)類似于使用了var關(guān)鍵字,即在當(dāng)前塊級(jí)作用域外無(wú)法訪問(wèn)。
{
function fun() {
console.log('this is fun');
}
}
fun(); // this is fun
// 上面的等同于下面的函數(shù)
{
var fn = function () {
console.log('this is fn');
}
}
fn(); // this is fn
// 如果使用 let 關(guān)鍵字 則在塊級(jí)作用域外無(wú)法訪問(wèn)
{
let f = function () {
console.log('this is f');
}
}
f(); // 拋出異常 描述信息為 ReferenceError: f is not defined
到此這篇關(guān)于JavaScript ES新特性塊級(jí)作用域的文章就介紹到這了,更多相關(guān)ES新特性塊級(jí)作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用 JavaScript 構(gòu)建命令行應(yīng)用
這篇文章主要介紹了利用 JavaScript 構(gòu)建命令行應(yīng)用,下面文章圍繞如何利用JavaScript 構(gòu)建命令行應(yīng)用的相關(guān)資料炸開詳細(xì)內(nèi)容,需要的朋友可以參考一下2021-11-11
js前端面試常見瀏覽器緩存強(qiáng)緩存及協(xié)商緩存實(shí)例
這篇文章主要為大家介紹了js前端面試常見瀏覽器緩存強(qiáng)緩存及協(xié)商緩存示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
微信小程序 向左滑動(dòng)刪除功能的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序 向左滑動(dòng)刪除功能的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-03-03
javascript使用btoa和atob來(lái)進(jìn)行Base64轉(zhuǎn)碼和解碼
javascript原生的api本來(lái)就支持,Base64,但是由于之前的javascript局限性,導(dǎo)致Base64基本中看不中用。當(dāng)前html5標(biāo)準(zhǔn)正式化之際,Base64將有較大的轉(zhuǎn)型空間,對(duì)于Html5 Api中出現(xiàn)的如FileReader Api, 拖拽上傳,甚至是Canvas,Video截圖都可以實(shí)現(xiàn)2017-03-03
JavaScript?Canvas實(shí)現(xiàn)噪點(diǎn)濾鏡回憶童年電視雪花屏
這篇文章主要為大家介紹了JavaScript?Canvas實(shí)現(xiàn)噪點(diǎn)濾鏡回憶童年電視雪花屏,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
微信公眾號(hào) 客服接口的開發(fā)實(shí)例詳解
這篇文章主要介紹了微信公眾號(hào) 客服接口的開發(fā)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09

