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