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)一些問題:
局部變量可能會(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í)作用域外無法訪問。
{ 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í)作用域外無法訪問 { 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-11js前端面試常見瀏覽器緩存強(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-03javascript使用btoa和atob來進(jìn)行Base64轉(zhuǎn)碼和解碼
javascript原生的api本來就支持,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-03JavaScript?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