JavaScript ES6新關鍵詞 let 是否在任何情況下都優於 var

時間 2021-05-29 23:15:39

1樓:普羅提諾

讀了這篇部落格For and against 'let',覺著var 和 let都有用,所有地方都用let的話,有種濫用的感覺。

比如部落格中提到的:

function

foo()if(

a>5)

console

.log(a);}

2樓:

在確實需要函式作用域的情況,我覺得是可以接受的,如functionf()

else

console

.log(b

);// 3

}當然也可以用

functionf()

else

console

.log(b

);// 3

}來實現

3樓:RednaxelaFX

在語義層面上let + const完爆var這個不用多說。參考其它答案就好了。

不過在目前這個時間點上let + const的效能不一定完爆var,主要是JS引擎們針對新特性的優化還沒做全——這在有一定歷史的JS引擎上一開始會更糟糕。

最典型的糟糕狀況之一是:為了快速實現對let的支援,有些JS引擎實現可能會把帶let的作用域用類似IIFE的方式實現,於是進個作用域可能隱含了類似函式呼叫的開銷,實在恐怖。

這是因為這些個JS引擎最初實現的時候有些核心資料結構寫得太死了,沒有留足夠彈性來實現函式內的塊級作用域。改動核心資料結構又太傷筋動骨,只好先用比較慢的方法來實現。

用了let之後您的程式在您希望支援的平台上是否有變慢,還是得親測驗證下的好。

但這只是暫時的狀況,事情會變好的——大家都知道如何正確高效能的實現函式內塊級作用域,只是要花時間人力物力而已。

簡而言之:能用let + const的地方還是盡量用,主流JS引擎對它們的支援只會越來越好,過不了多久就能徹底完爆var了。

另外有這麼篇文章提到:即便在ES6裡,如果希望宣告乙個函式作用域的區域性變數,還是可以用var關鍵字來宣告來表達意圖。這個我覺得也是個有趣的思路,如果您認同這個觀點這麼做也不錯:

For and against 'let'

4樓:Shaopeng

理論上是的。

不過實際上如果你對JS的Best Practice夠熟練,對function和變數的作用域夠了解,寫的函式夠模組化的話,一般來說你也不會需要在if/for區塊中宣告變數,即使用let,也不會用到這個「優點」。

所以我覺得let算是乙個照顧初學者/其他語言使用者的特性。

5樓:凡不覺

var 會變數提公升(Hoisting)

a //undefined

var a=1

b //error: b is not definedlet b=1

估計會有些人喜歡把宣告寫在底部。

6樓:王昱森

js 本不是我的程式設計母語,所以在我使用 js 的初期難以想象會出現這種結果。

var temp = 1

if(true)

console.log(temp) // 2後來才知道 js 沒有塊級作用域。

除此以外使用 var 好像跟 let 差不多了。

日常使用中利用 var 的特點常做這樣的事:如果不存在 x,重新定義 var x = xx,可以省去大括號外提前宣告,多用於依賴庫或特徵檢測,但又可以用 var x = x || xx 的形式替代。

真想不到 var 還有什麼奇妙應用了。

如何評價如今關8関 的6人團隊

DAISY 看了十五祭大阪場比gr8est時候更加餘裕從容 yasu身體恢復了很多蹦蹦跳跳像只搖滾小兔無論是舞曲不插電還是band都無可挑剔發揮穩定又燃爆 他們是最高最強的関 相信他們跟著他們走下去就好了不會有錯的 AnnieLee 17年底入坑的來答一波 以前是很狂熱地喜歡8 只要是跟8有關的綜藝...

萌新不懂就問,fgo這活動關咋過

五月雨 這個需要苟七回合,所以黑狗助戰可以放後面。我是前面放可以苟幾回合的英靈 有嘲諷 迴避 無敵技能的 後面助戰芭娜娜一發帶走。 貓言 有條件的話放三條狗和瑪麗開技能靠三次閃避無敵,帶自帶閃避無敵或毅力的禮裝苟過7回合。前排放打手和拐 同樣帶保命禮裝 先把打手充滿,帶換人衣服把打手放最後排 尼伯龍...

如何評價6月新遊《muse dash》

本質上差不多就是把太鼓拆成兩個軌道,但用打小怪 打boss的方式來表現,這點是很有創意的。對那些不太了解音遊的玩家來說,這比你告訴他 發狂段 什麼的要更容易理解。UI什麼的很有特色,還是很能吸引人的。這方面我不太懂,不過用睿國引誘區 這個名字 的up主的話說就是,很萌二 選曲不錯,有偏萌系的曲子 和...