在jquery中,let是一個(gè)聲明變量的關(guān)鍵字,let關(guān)鍵字允許聲明一個(gè)作用域被限制在塊作用域中的變量、語句或者表達(dá)式。let聲明的變量不會在作用域中被提升,它是在編譯時(shí)才初始化;let不會在全局聲明時(shí)(在最頂層的作用域)創(chuàng)建window對象的屬性。
本教程操作環(huán)境:windows7系統(tǒng)、jquery3.6.0版本、Dell G3電腦。
在jquery中,let是一個(gè)聲明變量的關(guān)鍵字。
let關(guān)鍵字聲明一個(gè)塊級作用域的局部變量,并可以初始化為一個(gè)值(可選)。語法:
let name1 [= value1] [, name2 [= value2]] [, ..., nameN [= valueN];
參數(shù)
-
nameN:要聲明的一個(gè)或多個(gè)變量的名稱,必須是合法的標(biāo)識符。
-
valueN:可選,規(guī)定變量的初始值,可以是任意合法的表達(dá)式。
示例:
let x = 1; if (x === 1) { let x = 2; console.log(x); // expected output: 2 } console.log(x); // expected output: 1
說明:
let 允許你聲明一個(gè)作用域被限制在塊作用域中的變量、語句或者表達(dá)式。與 var 關(guān)鍵字不同的是,var 聲明的變量作用域是全局或者整個(gè)函數(shù)塊的。 var 和 let 的另一個(gè)重要區(qū)別,let 聲明的變量不會在作用域中被提升,它是在編譯時(shí)才初始化(參考下面的暫時(shí)性死區(qū))。
就像 const 一樣,let 不會在全局聲明時(shí)(在最頂層的作用域)創(chuàng)建 window 對象的屬性。
可以從這里了解我們?yōu)槭裁词褂?let。
通過在使用 let 變量的作用域頂部聲明它們,可以避免很多問題,但這樣做可能會影響可讀性。
與 var 不同的是,let 只是開始聲明,而非一個(gè)完整的表達(dá)式。這意味著你不能將單獨(dú)的 let 聲明作為一個(gè)代碼塊的主體(這是有道理的,因?yàn)槁暶鞯淖兞繜o法被訪問)。
if (true) let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
作用域規(guī)則
let 聲明的變量作用域只在其聲明的塊或子塊內(nèi)部,這一點(diǎn),與 var 相似。二者之間最主要的區(qū)別在于 var 聲明的變量的作用域是整個(gè)封閉函數(shù)。
function varTest() { var x = 1; { var x = 2; // same variable! console.log(x); // 2 } console.log(x); // 2}function letTest() { let x = 1; { let x = 2; // different variable console.log(x); // 2 } console.log(x); // 1} letTest(); varTest();
在全局作用域中,let 和 var 不一樣,它不會在全局對象上創(chuàng)建屬性。例如:
var x = 'global'; let y = 'global'; console.log(this.x); // "global" console.log(this.y); // undefined
重復(fù)聲明
在同一個(gè)函數(shù)或塊作用域中重復(fù)聲明同一個(gè)變量會拋出 SyntaxError。
if (x) { let foo; let foo; // SyntaxError thrown. }
在 switch 語句中也會觸發(fā)這個(gè)錯(cuò)誤,因?yàn)樗峭粋€(gè)塊作用域。
let x = 1; switch(x) { case 0: let foo; break; case 1: let foo; // SyntaxError for redeclaration. break; }
然而,需要特別指出的是,一個(gè)嵌套在 case 子句中的塊會創(chuàng)建一個(gè)新的塊作用域的詞法環(huán)境,就不會產(chǎn)生上訴重復(fù)聲明的錯(cuò)誤。
let x = 1; switch(x) { case 0: { let foo; break; } case 1: { let foo; break; } }
【推薦學(xué)習(xí):jQuery視頻教程、web前端視頻】