我抬头变量范围并不孤立
你在哪里看这事呢?每个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