JavaScript塊級作用域綁定的實(shí)現(xiàn)流程
1.var聲明和變量提升
無論是在函數(shù)作用域亦或是全局作用中使用var聲明的變量,都會在預(yù)編譯階段被提升到當(dāng)前作用域的頂部。
function func(condition) {
if(condition){
var value = "value";
return value;
} else {
//此處可訪問到value,但值為undefined
return null;
}
//此處可訪問到value,但值為undefined
}
通常在擁有塊級作用域的語言中,上述代碼塊只會在當(dāng)參數(shù)condition的值為true時,value變量才會被創(chuàng)建,且只能在if代碼塊中被訪問到。但在js中,無論condition的值是什么,value變量都會被創(chuàng)建,它再預(yù)編譯階段中的實(shí)際表現(xiàn)如下:
function func(condition) {
var value;
if(condition){
var value = "value";
return value;
} else {
return null;
}
}
2.塊級聲明和臨時死區(qū)
塊級聲明會將當(dāng)前聲明變量的作用域限制在函數(shù)作用域或塊級作用域內(nèi)部,其他非作用區(qū)域訪問會得到undefined。
function func(condition) {
if(condition){
let value = "value";
return value;
} else {
//此處訪問value會報錯
return null;
}
//此處訪問value會報錯
}
使用let或const的聲明的變量會在預(yù)編譯階段被加入到臨時性死區(qū)(TDZ)中,訪問臨時性死區(qū)中的變量會觸發(fā)引用錯誤。
3.禁止重復(fù)聲明
使用var聲明同名變量時,不會產(chǎn)生任何問題,因?yàn)樗皇窍喈?dāng)于一個賦值操作。
function(condition) {
var value = "value";
var value = "val";
//相當(dāng)于
var value = "value";
value = "val";
}
但使用let和const聲明變量時,會禁止聲明同名變量,拋出變量已定義異常。
4.塊級作用域綁定的最佳實(shí)踐
變量定義默認(rèn)使用const,只有確實(shí)需要改變變量的值時使用let。
到此這篇關(guān)于JavaScript塊級作用域綁定的實(shí)現(xiàn)流程的文章就介紹到這了,更多相關(guān)JS塊級作用域綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js利用遞歸與promise 按順序請求數(shù)據(jù)的方法
這篇文章主要介紹了js利用遞歸與promise 按順序請求數(shù)據(jù),需要的朋友可以參考下2019-08-08
用javascript實(shí)現(xiàn)檢測指定目錄是否存在的方法
今天看到一篇關(guān)于onegreen被掛馬的代碼發(fā)現(xiàn)這個函數(shù),它用js就可以檢測,制定的目錄或指定的文件是否存在,一般用來讀chm文件中的圖片來檢測,目錄的存在。高手就是不學(xué)好。2008-01-01
JavaScript設(shè)計模式之構(gòu)造器模式(生成器模式)定義與用法實(shí)例分析
這篇文章主要介紹了JavaScript設(shè)計模式之構(gòu)造器模式(生成器模式)定義與用法,結(jié)合實(shí)例形式分析了javascript構(gòu)造器模式的概念、原理、與工廠模式的區(qū)別以及相關(guān)使用方法,需要的朋友可以參考下2018-07-07

