我擡頭變量範圍並不孤立
你在哪裏看這事呢?每個JS教程和幫助頁面都清楚地表明,使用var
聲明的變量具有函數範圍。
我對開始JS程序員的表面看起來很迷惑,提出了範圍和提升的問題。正確的方法是:
聲明你的變量在你所屬函數的頂部。幾乎所有的風格指南,如果你遵循一個,無論如何需要這個。幾乎所有棉絨,如果您使用棉絨,將或可以配置爲強制執行此操作。
花你計劃用於擔心提升,變量範圍和臨時死亡區的時間,而不是去讀一本書,遛狗,或者實際上做有用的編碼。
過着漫長而幸福的生活。
如果由於某種原因,你有變量作用域爲塊(任何內部{}
,如if
或for
語句體)是很重要的,那麼,使用let
。在現實世界中,我認爲你會發現這樣的例子很少,除非你正在編寫包含數十或數百行的巨大函數,這是不好的做法。在這種情況下,再次遵循最佳做法,並在塊的頂部聲明所有變量。
如果您沒有let
可用,並且想要在塊內使用另一個同名變量,那麼剛剛使用另一個變量呢?例如,在您給出的示例中,在if
區塊內使用test1
而不是test
。這實際上是巴貝爾在封面下做的。它transpiles
function f() { var x; { let x; } }
到
function f() { var x; { var _x; } }
^^
你會看到它已改名爲內x
到_x
。
你的問題基本上相當於想知道爲什麼當你在你的眼睛裏貼針時疼。不要擔心不同種類的針頭會粘在你的眼睛裏,也不會擔心由此產生的疼痛的生物學機制,爲什麼不停止將針頭粘在眼睛上呢?
使用'let'而不是'var'。或者如果您需要支持舊版瀏覽器(舊IE),請使用IIFE。 – nnnnnn
*我擡頭看,變量範圍不是孤立的*你在哪裏看起來? –
爲什麼你需要相同的變量名?只需使用其他名稱。 – Thevs