TypeScript中l(wèi)et和var的區(qū)別介紹
1、作用域不同
用var聲明的變量,只有函數(shù)作用域和全局作用域,沒有塊級作用域。而let可以實現(xiàn)塊級作用域,只能在代碼塊{}內(nèi)有效,在{}之外不能訪問,如下代碼所示:
{
let a = 0;
var b = 1;
}
console.log(a) // ReferenceError: a is not defined
console.log(b) // 12、let沒有變量提升
在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。這在語法上,稱為:暫時性死區(qū),英文為:temporal dead zone,簡稱 TDZ。
//報錯 console.log(a) let a=10
3、let變量不能重復聲明
使用var,多次聲明同一個變量,不會報錯,只會得到一個變量。
var a=1; var a=2;
上述例子中,所有的a的聲明實際上都引用了一個相同的a。在多人開發(fā)一個項目時,容易出現(xiàn)問題。比如都定義了一個變量a,但各自用途不同,后面定義的a會把前面定義的覆蓋掉。
而let就相對嚴格,無法多次聲明同一個變量,一個變量只能聲明一次,并且無法在 let 語句前去訪問該變量
let a=1; let a=2; //錯誤
4、for循環(huán)中的let與var
for (var i = 0; i < 3; i++) {
setTimeout(function (){console.log("i:" + i);});
}上述代碼打印出來i都是3,這個結果令人感覺奇怪。其實并不奇怪,原因如下所示:
(1)var是全局變量,并且可以允許重復定義,所以在for (var i = 0; i < 3; i++)語句中,i重復定義了3次,最終的值以最后一次定義為準。
(2)javascript是單線程,setTimeout()會等for執(zhí)行完之后才開始計時,此時i的值為3,最終打印出3
for (let j = 0; j < 3; j++) {
setTimeout(function (){console.log("j:" + j);});
}上述代碼打印出來i是0、1、2,原因分析如下:
(1)變量j是用let聲明的,當前的j只在本輪循環(huán)中有效,每次循環(huán)的j其實都是一個新的變量。
(2)在for循環(huán)中,不僅循環(huán)體{}會生成塊級作用域,循環(huán)條件()也會生成塊級作用域,循環(huán)條件()的塊級作用域是循環(huán)體{}塊級作用域的父級作用域,所以let可以跨越()和{}作用域。
到此這篇關于TypeScript let與var的區(qū)別的文章就介紹到這了,更多相關TypeScript let與var區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
js 頁面刷新location.reload和location.replace的區(qū)別小結
在實際應用的時候,重新刷新頁面的時候,我們通常使用: location.reload() 或者是 history.go(0) 來做。下面有一些相關的內(nèi)容,大家看完了就會有更多的收獲。2009-12-12
Tesseract.js使用純js實現(xiàn)的OCR文字識別
Tesseract.js是流行的Tesseract OCR引擎的純Javascript端口,這個庫支持100多種語言,自動文本定位和腳本檢測,一個簡單的界面,用于閱讀段落、單詞和字符邊界框,Tesseract.js既可以在瀏覽器中運行,也可以在帶有NodeJS的服務器上運行2023-10-10
JS中touchstart事件與click事件沖突的解決方法
這篇文章主要給大家介紹了關于JS中touchstart事件與click事件沖突的解決方法,文中通過示例代碼將解決的方法介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-03-03

