【问题标题】:What exactly happens if you use `var` on an already initialized variable [duplicate]如果在已经初始化的变量上使用`var`会发生什么[重复]
【发布时间】:2013-12-25 23:34:54
【问题描述】:

我只是想知道如果您尝试多次初始化一个变量(内部)究竟会发生什么。

例如:

var x = -5;

if(x < 0) {
    var x = 5;
}

我知道最终结果将是x = 5,但这会导致浏览器销毁变量并重新启动它吗?

【问题讨论】:

  • @OliCharlesworth — 不是重复的。这讨论了不同函数中的变量。本题是关于在同一个函数中多次使用var
  • @Quentin:啊,好点子。
  • @OliCharlesworth 那不一样。第一个初始化绑定到窗口,第二个绑定到函数。
  • 两口子和樱桃——主题中的问题与正文中的问题不同。

标签: javascript


【解决方案1】:

没有。

var 无论如何都会被提升,所以它出现在函数中的哪个位置并不重要。

【讨论】:

  • 我只是好奇,ECMA 标准是否对双重声明有任何规定?
  • ish。它说只有在尚未声明的情况下才做某事。
【解决方案2】:

When a function is abeout to be executed, all variable and function declarations are evaluated.这是变量声明的步骤:

8。对于 code 中的每个 VariableDeclarationVariableDeclarationNoIn d,按源文本顺序执行

  设 dnd 中的 Identifier

   b.让 varAlreadyDeclared 成为调用 env 的 HasBinding 具体方法并传递 dn 作为参数的结果。

   c.如果 varAlreadyDeclaredfalse,则
一世。调用 env 的 CreateMutableBinding 具体方法,传递 dnconfigurableBindings 作为参数。
ii.调用 envSetMutableBinding 具体方法,传递 dnundefinedstrict 为论据。

就是这样,varAlreadyDeclaredtrue 没有“else”子句。当变量已经被声明时,什么都不会发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多