“睡服”面试官系列第一篇之let和const命令(建议收藏学习)
目錄
1let命令
1.1基本用法
1.2for循環(huán)小案例
1.3不存在變量提升
1.4暫時(shí)性死區(qū)
1.5不允許重復(fù)聲明
2塊級(jí)作用域
2.1為什么需要塊級(jí)作用域?
2.2ES6 的塊級(jí)作用域
2.3塊級(jí)作用域和函數(shù)聲明
3const
3.1本質(zhì)
4頂層對(duì)象的屬性
5global對(duì)象
6總結(jié)
1let命令
1.1基本用法
ES6 新增了 let 命令,用來(lái)聲明變量。它的用法類似于 var ,但是所聲明的變量,只在 let 命令所在的代碼塊內(nèi)有效。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>{let a = 10;var b = 1}console.log(a) // ReferenceError: a is not defined.console.log(b) //1</script> </body></html>上面代碼在代碼塊之中,分別用 let 和 var 聲明了兩個(gè)變量。然后在代碼塊之外調(diào)用這兩個(gè)變量,結(jié)果 let 聲明的變量報(bào)錯(cuò), var 聲明的變量返回了正確
的值。這表明, let 聲明的變量只在它所在的代碼塊有效
1.2for循環(huán)小案例
for 循環(huán)的計(jì)數(shù)器,就很合適使用 let 命令
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>for (let i = 0; i < 10; i++) {// ...}console.log(i);// ReferenceError: i is not defined</script> </body></html>上面代碼中,計(jì)數(shù)器 i 只在 for 循環(huán)體內(nèi)有效,在循環(huán)體外引用就會(huì)報(bào)錯(cuò)。
下面的代碼如果使用 var ,最后輸出的是 10 。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>var a = [];for (var i = 0; i < 10; i++) {a[i] = function() {console.log(i);};}a[6](); // 10</script> </body></html>上面代碼中,變量 i 是 var 命令聲明的,在全局范圍內(nèi)都有效,所以全局只有一個(gè)變量 i 。每一次循環(huán),變量 i 的值都會(huì)發(fā)生改變,而循環(huán)內(nèi)被賦給數(shù)組 a
的函數(shù)內(nèi)部的 console.log(i) ,里面的 i 指向的就是全局的 i 。也就是說(shuō),所有數(shù)組 a 的成員里面的 i ,指向的都是同一個(gè) i ,導(dǎo)致運(yùn)行時(shí)輸出的是最后
一輪的 i 的值,也就是 10。
如果使用 let ,聲明的變量?jī)H在塊級(jí)作用域內(nèi)有效,最后輸出的是 6
上面代碼中,變量 i 是 let 聲明的,當(dāng)前的 i 只在本輪循環(huán)有效,所以每一次循環(huán)的 i 其實(shí)都是一個(gè)新的變量,所以最后輸出的是 6 。你可能會(huì)問(wèn),如果每
一輪循環(huán)的變量 i 都是重新聲明的,那它怎么知道上一輪循環(huán)的值,從而計(jì)算出本輪循環(huán)的值?這是因?yàn)?JavaScript 引擎內(nèi)部會(huì)記住上一輪循環(huán)的值,初
始化本輪的變量 i 時(shí),就在上一輪循環(huán)的基礎(chǔ)上進(jìn)行計(jì)算。
另外, for 循環(huán)還有一個(gè)特別之處,就是設(shè)置循環(huán)變量的那部分是一個(gè)父作用域,而循環(huán)體內(nèi)部是一個(gè)單獨(dú)的子作用域。
上面代碼正確運(yùn)行,輸出了 3 次 abc 。這表明函數(shù)內(nèi)部的變量 i 與循環(huán)變量 i 不在同一個(gè)作用域,有各自單獨(dú)的作用域。
1.3不存在變量提升
var 命令會(huì)發(fā)生”變量提升“現(xiàn)象,即變量可以在聲明之前使用,值為 undefined 。這種現(xiàn)象多多少少是有些奇怪的,按照一般的邏輯,變量應(yīng)該在聲明語(yǔ)
句之后才可以使用。
為了糾正這種現(xiàn)象, let 命令改變了語(yǔ)法行為,它所聲明的變量一定要在聲明后使用,否則報(bào)錯(cuò)
上面代碼中,變量 foo 用 var 命令聲明,會(huì)發(fā)生變量提升,即腳本開(kāi)始運(yùn)行時(shí),變量 foo 已經(jīng)存在了,但是沒(méi)有值,所以會(huì)輸出 undefined 。變量 bar 用
let 命令聲明,不會(huì)發(fā)生變量提升。這表示在聲明它之前,變量 bar 是不存在的,這時(shí)如果用到它,就會(huì)拋出一個(gè)錯(cuò)誤。
1.4暫時(shí)性死區(qū)
只要塊級(jí)作用域內(nèi)存在 let 命令,它所聲明的變量就“綁定”(binding)這個(gè)區(qū)域,不再受外部的影響。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>var tmp = 123;if (true) {tmp = 'abc'; // ReferenceErrorlet tmp;}</script> </body></html>上面代碼中,存在全局變量 tmp ,但是塊級(jí)作用域內(nèi) let 又聲明了一個(gè)局部變量 tmp ,導(dǎo)致后者綁定這個(gè)塊級(jí)作用域,所以在 let 聲明變量前,對(duì) tmp 賦
值會(huì)報(bào)錯(cuò)。
ES6 明確規(guī)定,如果區(qū)塊中存在 let 和 const 命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域。凡是在聲明之前就使用這些變量,
就會(huì)報(bào)錯(cuò)。
總之,在代碼塊內(nèi),使用 let 命令聲明變量之前,該變量都是不可用的。這在語(yǔ)法上,稱為“暫時(shí)性死區(qū)”(temporal dead zone,簡(jiǎn)稱 TDZ)。
上面代碼中,在 let 命令聲明變量 tmp 之前,都屬于變量 tmp 的“死區(qū)”。
“暫時(shí)性死區(qū)”也意味著 typeof 不再是一個(gè)百分之百安全的操作
上面代碼中,變量 x 使用 let 命令聲明,所以在聲明之前,都屬于 x 的“死區(qū)”,只要用到該變量就會(huì)報(bào)錯(cuò)。因此, typeof 運(yùn)行時(shí)就會(huì)拋出一個(gè)
ReferenceError 。
作為比較,如果一個(gè)變量根本沒(méi)有被聲明,使用 typeof 反而不會(huì)報(bào)錯(cuò)
上面代碼中, undeclared_variable 是一個(gè)不存在的變量名,結(jié)果返回“undefined”。所以,在沒(méi)有 let 之前, typeof 運(yùn)算符是百分之百安全的,永遠(yuǎn)不
會(huì)報(bào)錯(cuò)。現(xiàn)在這一點(diǎn)不成立了。這樣的設(shè)計(jì)是為了讓大家養(yǎng)成良好的編程習(xí)慣,變量一定要在聲明之后使用,否則就報(bào)錯(cuò)。
有些“死區(qū)”比較隱蔽,不太容易發(fā)現(xiàn)
上面代碼中,調(diào)用 bar 函數(shù)之所以報(bào)錯(cuò)(某些實(shí)現(xiàn)可能不報(bào)錯(cuò)),是因?yàn)閰?shù) x 默認(rèn)值等于另一個(gè)參數(shù) y ,而此時(shí) y 還沒(méi)有聲明,屬于”死區(qū)“。如果 y 的默
認(rèn)值是 x ,就不會(huì)報(bào)錯(cuò),因?yàn)榇藭r(shí) x 已經(jīng)聲明了。
另外,下面的代碼也會(huì)報(bào)錯(cuò),與 var 的行為不同
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>// 不報(bào)錯(cuò)var x = x;// 報(bào)錯(cuò)let x = x;// ReferenceError: x is not defined</script> </body></html>上面代碼報(bào)錯(cuò),也是因?yàn)闀簳r(shí)性死區(qū)。使用 let 聲明變量時(shí),只要變量在還沒(méi)有聲明完成前使用,就會(huì)報(bào)錯(cuò)。上面這行就屬于這個(gè)情況,在變量 x 的聲明
語(yǔ)句還沒(méi)有執(zhí)行完成前,就去取 x 的值,導(dǎo)致報(bào)錯(cuò)”x 未定義“。
ES6 規(guī)定暫時(shí)性死區(qū)和 let 、 const 語(yǔ)句不出現(xiàn)變量提升,主要是為了減少運(yùn)行時(shí)錯(cuò)誤,防止在變量聲明前就使用這個(gè)變量,從而導(dǎo)致意料之外的行為。
這樣的錯(cuò)誤在 ES5 是很常見(jiàn)的,現(xiàn)在有了這種規(guī)定,避免此類錯(cuò)誤就很容易了。
總之,暫時(shí)性死區(qū)的本質(zhì)就是,只要一進(jìn)入當(dāng)前作用域,所要使用的變量就已經(jīng)存在了,但是不可獲取,只有等到聲明變量的那一行代碼出現(xiàn),才可以獲
取和使用該變量。
1.5不允許重復(fù)聲明
let 不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>// 報(bào)錯(cuò)function func() {let a = 10;var a = 1;}// 報(bào)錯(cuò)function func() {let a = 10;let a = 1;}</script> </body></html>因此,不能在函數(shù)內(nèi)部重新聲明參數(shù)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>function func(arg) {let arg; // 報(bào)錯(cuò)}function func(arg) {{let arg; // 不報(bào)錯(cuò)}}</script> </body></html>2塊級(jí)作用域
2.1為什么需要塊級(jí)作用域?
ES5 只有全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域,這帶來(lái)很多不合理的場(chǎng)景。
第一種場(chǎng)景,內(nèi)層變量可能會(huì)覆蓋外層變量。
上面代碼的原意是, if 代碼塊的外部使用外層的 tmp 變量,內(nèi)部使用內(nèi)層的 tmp 變量。但是,函數(shù) f 執(zhí)行后,輸出結(jié)果為 undefined ,原因在于變量提
升,導(dǎo)致內(nèi)層的 tmp 變量覆蓋了外層的 tmp 變量。
第二種場(chǎng)景,用來(lái)計(jì)數(shù)的循環(huán)變量泄露為全局變量
上面代碼中,變量 i 只用來(lái)控制循環(huán),但是循環(huán)結(jié)束后,它并沒(méi)有消失,泄露成了全局變量。
2.2ES6 的塊級(jí)作用域
let 實(shí)際上為 JavaScript 新增了塊級(jí)作用域。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>function f1() {let n = 5;if (true) {let n = 10;}console.log(n); // 5}</script> </body></html>上面的函數(shù)有兩個(gè)代碼塊,都聲明了變量 n ,運(yùn)行后輸出 5。這表示外層代碼塊不受內(nèi)層代碼塊的影響。如果兩次都使用 var 定義變量 n ,最后輸出的值
才是 10。
ES6 允許塊級(jí)作用域的任意嵌套。
上面代碼使用了一個(gè)五層的塊級(jí)作用域。外層作用域無(wú)法讀取內(nèi)層作用域的變量。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>{{{{{let insane = 'Hello World'}console.log(insane); // 報(bào)錯(cuò)}}}};</script> </body></html>內(nèi)層作用域可以定義外層作用域的同名變量。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>{{{{let insane = 'Hello World'; {let insane = 'Hello World'}}}}};</script> </body></html>塊級(jí)作用域的出現(xiàn),實(shí)際上使得獲得廣泛應(yīng)用的立即執(zhí)行函數(shù)表達(dá)式(IIFE)不再必要了。
// IIFE 寫(xiě)法(function() {var tmp = ...;...}());// 塊級(jí)作用域?qū)懛▄let tmp = ...;...}2.3塊級(jí)作用域和函數(shù)聲明
函數(shù)能不能在塊級(jí)作用域之中聲明?這是一個(gè)相當(dāng)令人混淆的問(wèn)題。
ES5 規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級(jí)作用域聲明。
上面兩種函數(shù)聲明,根據(jù) ES5 的規(guī)定都是非法的。
但是,瀏覽器沒(méi)有遵守這個(gè)規(guī)定,為了兼容以前的舊代碼,還是支持在塊級(jí)作用域之中聲明函數(shù),因此上面兩種情況實(shí)際都能運(yùn)行,不會(huì)報(bào)錯(cuò)。ES6 引入了塊級(jí)作用域,明確允許在塊級(jí)作用域之中聲明函數(shù)。ES6 規(guī)定,塊級(jí)作用域之中,函數(shù)聲明語(yǔ)句的行為類似于 let ,在塊級(jí)作用域之外不可引
用
上面代碼在 ES5 中運(yùn)行,會(huì)得到“I am inside!”,因?yàn)樵?if 內(nèi)聲明的函數(shù) f 會(huì)被提升到函數(shù)頭部,實(shí)際運(yùn)行的代碼如下。
ES6 就完全不一樣了,理論上會(huì)得到“I am outside!”。因?yàn)閴K級(jí)作用域內(nèi)聲明的函數(shù)類似于 let ,對(duì)作用域之外沒(méi)有影響。但是,如果你真的在 ES6 瀏
覽器中運(yùn)行一下上面的代碼,是會(huì)報(bào)錯(cuò)的,這是為什么呢?
原來(lái),如果改變了塊級(jí)作用域內(nèi)聲明的函數(shù)的處理規(guī)則,顯然會(huì)對(duì)老代碼產(chǎn)生很大影響。為了減輕因此產(chǎn)生的不兼容問(wèn)題,ES6 在附錄 B里面規(guī)定,瀏覽
器的實(shí)現(xiàn)可以不遵守上面的規(guī)定,有自己的行為方式。
允許在塊級(jí)作用域內(nèi)聲明函數(shù)。
函數(shù)聲明類似于 var ,即會(huì)提升到全局作用域或函數(shù)作用域的頭部。
同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級(jí)作用域的頭部。
注意,上面三條規(guī)則只對(duì) ES6 的瀏覽器實(shí)現(xiàn)有效,其他環(huán)境的實(shí)現(xiàn)不用遵守,還是將塊級(jí)作用域的函數(shù)聲明當(dāng)作 let 處理。
根據(jù)這三條規(guī)則,在瀏覽器的 ES6 環(huán)境中,塊級(jí)作用域內(nèi)聲明的函數(shù),行為類似于 var 聲明的變量
上面的代碼在符合 ES6 的瀏覽器中,都會(huì)報(bào)錯(cuò),因?yàn)閷?shí)際運(yùn)行的是下面的代碼。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>// 瀏覽器的 ES6 環(huán)境function f() {console.log('I am outside!');}(function() {var f = undefined;if (false) {function f() {console.log('I am inside!');}}f();}());// Uncaught TypeError: f is not a function</script> </body></html>考慮到環(huán)境導(dǎo)致的行為差異太大,應(yīng)該避免在塊級(jí)作用域內(nèi)聲明函數(shù)。如果確實(shí)需要,也應(yīng)該寫(xiě)成函數(shù)表達(dá)式,而不是函數(shù)聲明語(yǔ)句。
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>// 函數(shù)聲明語(yǔ)句{let a = 'secret';function f() {return a;}}// 函數(shù)表達(dá)式{let a = 'secret';let f = function() {return a;};}</script> </body></html>另外,還有一個(gè)需要注意的地方。ES6 的塊級(jí)作用域允許聲明函數(shù)的規(guī)則,只在使用大括號(hào)的情況下成立,如果沒(méi)有使用大括號(hào),就會(huì)報(bào)錯(cuò)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>// 不報(bào)錯(cuò)'use strict';if (true) {function f() {}}// 報(bào)錯(cuò)'use strict';if (true)function f() {</script> </body></html>3const
const 聲明一個(gè)只讀的常量。一旦聲明,常量的值就不能改變
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>const PI = 3.1415;PI // 3.1415PI = 3;// TypeError: Assignment to constant variable</script> </body></html>上面代碼表明改變常量的值會(huì)報(bào)錯(cuò)。
const 聲明的變量不得改變值,這意味著, const 一旦聲明變量,就必須立即初始化,不能留到以后賦值。
上面代碼表示,對(duì)于 const 來(lái)說(shuō),只聲明不賦值,就會(huì)報(bào)錯(cuò)。
const 的作用域與 let 命令相同:只在聲明所在的塊級(jí)作用域內(nèi)有效。
const 命令聲明的常量也是不提升,同樣存在暫時(shí)性死區(qū),只能在聲明的位置后面使用
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>if (true) {console.log(MAX); // ReferenceErrorconst MAX = 5;}</script> </body></html>上面代碼在常量 MAX 聲明之前就調(diào)用,結(jié)果報(bào)錯(cuò)。
const 聲明的常量,也與 let 一樣不可重復(fù)聲明。
3.1本質(zhì)
const 實(shí)際上保證的,并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址不得改動(dòng)。對(duì)于簡(jiǎn)單類型的數(shù)據(jù)(數(shù)值、字符串、布爾值),值就保存在
變量指向的那個(gè)內(nèi)存地址,因此等同于常量。但對(duì)于復(fù)合類型的數(shù)據(jù)(主要是對(duì)象和數(shù)組),變量指向的內(nèi)存地址,保存的只是一個(gè)指針, const 只能保
證這個(gè)指針是固定的,至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的,就完全不能控制了。因此,將一個(gè)對(duì)象聲明為常量必須非常小心
上面代碼中,常量 foo 儲(chǔ)存的是一個(gè)地址,這個(gè)地址指向一個(gè)對(duì)象。不可變的只是這個(gè)地址,即不能把 foo 指向另一個(gè)地址,但對(duì)象本身是可變的,所以
依然可以為其添加新屬性
4頂層對(duì)象的屬性
頂層對(duì)象,在瀏覽器環(huán)境指的是 window 對(duì)象,在 Node 指的是 global 對(duì)象。ES5 之中,頂層對(duì)象的屬性與全局變量是等價(jià)的
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>test</title> </head><body><script>window.a = 1;a // 1a = 2;window.a // 2</script> </body></html>?上面代碼中,頂層對(duì)象的屬性賦值與全局變量的賦值,是同一件事。
頂層對(duì)象的屬性與全局變量掛鉤,被認(rèn)為是 JavaScript 語(yǔ)言最大的設(shè)計(jì)敗筆之一。這樣的設(shè)計(jì)帶來(lái)了幾個(gè)很大的問(wèn)題,首先是沒(méi)法在編譯時(shí)就報(bào)出變量未
聲明的錯(cuò)誤,只有運(yùn)行時(shí)才能知道(因?yàn)槿肿兞靠赡苁琼攲訉?duì)象的屬性創(chuàng)造的,而屬性的創(chuàng)造是動(dòng)態(tài)的);其次,程序員很容易不知不覺(jué)地就創(chuàng)建了全
局變量(比如打字出錯(cuò));最后,頂層對(duì)象的屬性是到處可以讀寫(xiě)的,這非常不利于模塊化編程。另一方面, window 對(duì)象有實(shí)體含義,指的是瀏覽器的窗
口對(duì)象,頂層對(duì)象是一個(gè)有實(shí)體含義的對(duì)象,也是不合適的。
5global對(duì)象
ES5 的頂層對(duì)象,本身也是一個(gè)問(wèn)題,因?yàn)樗诟鞣N實(shí)現(xiàn)里面是不統(tǒng)一的。
瀏覽器里面,頂層對(duì)象是 window ,但 Node 和 Web Worker 沒(méi)有 window 。
瀏覽器和 Web Worker 里面, self 也指向頂層對(duì)象,但是 Node 沒(méi)有 self 。
Node 里面,頂層對(duì)象是 global ,但其他環(huán)境都不支持。
同一段代碼為了能夠在各種環(huán)境,都能取到頂層對(duì)象,現(xiàn)在一般是使用 this 變量,但是有局限性。
全局環(huán)境中, this 會(huì)返回頂層對(duì)象。但是,Node 模塊和 ES6 模塊中, this 返回的是當(dāng)前模塊。
函數(shù)里面的 this ,如果函數(shù)不是作為對(duì)象的方法運(yùn)行,而是單純作為函數(shù)運(yùn)行, this 會(huì)指向頂層對(duì)象。但是,嚴(yán)格模式下,這時(shí) this 會(huì)返回
undefined 。
不管是嚴(yán)格模式,還是普通模式, new Function('return this')() ,總是會(huì)返回全局對(duì)象。但是,如果瀏覽器用了 CSP(Content Security
Policy,內(nèi)容安全政策),那么 eval 、 new Function 這些方法都可能無(wú)法使用。
綜上所述,很難找到一種方法,可以在所有情況下,都取到頂層對(duì)象
6總結(jié)
本博客源于本人閱讀相關(guān)書(shū)籍和視頻總結(jié),創(chuàng)作不易,謝謝點(diǎn)贊支持。學(xué)到就是賺到。我是歌謠,勵(lì)志成為一名優(yōu)秀的技術(shù)革新人員。
歡迎私信交流,一起學(xué)習(xí),一起成長(zhǎng)。
推薦鏈接 其他文件目錄參照
“睡服“面試官系列之各系列目錄匯總(建議學(xué)習(xí)收藏)
總結(jié)
以上是生活随笔為你收集整理的“睡服”面试官系列第一篇之let和const命令(建议收藏学习)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 车流量计数、不同车型统计算法
- 下一篇: 怎么看java源代码