JavaScript?ES新特性塊級作用域
前言:
在學(xué)習(xí)塊級作用域之前需要我們對作用域有個了解,所謂的作用域就是代碼當(dāng)中的某個成員起作用的范圍。
1.塊級作用域是什么
所謂的塊級作用域,就是該變量只能在聲明時的代碼塊或者子代碼塊中使用。在ECMAScript 2015以前的版本中是不存在塊級作用域的,而ECMAScript 2015提供的let關(guān)鍵字,使JavaScript出現(xiàn)了塊級作用域,示例代碼如下所示
/*
* 塊級作用域只能使用 let 關(guān)鍵字
* let關(guān)鍵字不僅可以聲明塊級作用域, 還可以用在全局作用域和函數(shù)作用域
*/
// 全局作用域
let a = 100; // 全局變量
(function () {
// 函數(shù)作用域
let b = 200; // 局部變量
})()
if (true) {
// 塊級作用域
let c = 300; // 局部變量
}
console.log(a); // 100
console.log(b); // 拋出異常
console.log(c); // 拋出異常
2.為什么需要塊級作用域
ECMAScript 5只存在全局作用域和函數(shù)作用域,沒有塊級作用域。這種情況出現(xiàn)一些問題:
局部變量可能會覆蓋全局變量
var v = 100;
(function(){
console.log(v); // undefined
var v = 200;
})
在循環(huán)體中用于計數(shù)的變量泄露為全局變量
// 定義一個循環(huán)體
for (var v = 0; v < 10; v++) {
console.log("這是一個 for 循環(huán)"); // 這是一個 for 循環(huán) * 10
}
console.log(v); // 10
在循環(huán)完畢之后如果不手動釋放此變量,其生命周期跟隨此腳本生存,占用內(nèi)存。
3.與函數(shù)聲明
ECMAScript5標(biāo)準(zhǔn)規(guī)定函數(shù)的聲明只能在全局作用域和函數(shù)作用域中,不能再塊級作用域中聲明。
情況一:
if (true) {
function f() {}
}
情況二:
try {
function f() {}
} catch(e) {
// ...
}
上面兩種函數(shù)聲明,根據(jù)ECMAScript5的規(guī)定都是非法的。
而 ECMAScript 2015標(biāo)準(zhǔn)規(guī)定在塊級作用域聲明函數(shù)類似于使用了var關(guān)鍵字,即在當(dāng)前塊級作用域外無法訪問。
{
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)鍵字 則在塊級作用域外無法訪問
{
let f = function () {
console.log('this is f');
}
}
f(); // 拋出異常 描述信息為 ReferenceError: f is not defined
到此這篇關(guān)于JavaScript ES新特性塊級作用域的文章就介紹到這了,更多相關(guān)ES新特性塊級作用域內(nèi)容請搜索腳本之家以前的文章或繼續(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
javascript使用btoa和atob來進(jìn)行Base64轉(zhuǎn)碼和解碼
javascript原生的api本來就支持,Base64,但是由于之前的javascript局限性,導(dǎo)致Base64基本中看不中用。當(dāng)前html5標(biāo)準(zhǔn)正式化之際,Base64將有較大的轉(zhuǎn)型空間,對于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

