【问题标题】:Does var ALWAYS override globals?var 是否总是覆盖全局变量?
【发布时间】:2014-01-26 09:25:30
【问题描述】:

假设从local 变量中省略var 是否正确?
总是覆盖同名的global,如果它也缺少var
另外,使用具有创意许可的var 有什么好处。

所以有一个参考框架,这是我发现的
来自我为 a previous post 创建的谜语。

Riddle #3

  • a = 5 中省略 var 会覆盖其对应的 global
  • blocalglobal 之间保持两极分化
  • 底部的alert()返回5*5+4+15
  • 4 是 local b。 15 是 global b,在第 25 行声明

Riddle #2

  • b = 4 中省略 var 会覆盖其对应的 global
  • alocalglobal 之间保持两极分化
  • 底部的alert()返回5*3+4+4 -
  • 5 是 local a。 3 是 global a,在第 11 行声明

Riddle #1

  • 从两个 local 变量中省略 var 会覆盖所有 global 对应项
  • localglobal 变量之间没有区别。
  • 底部的alert()返回5*5+4+4
  • 只能识别在 function 中声明的变量

【问题讨论】:

  • 他们被称为小提琴,而不是谜语;)
  • 你是问还是说?
  • 请在您的问题中加入相关代码 sn-ps,而不仅仅是对 jsfiddles 的引用。
  • @ToddMotto 只是展示我的发现并要求确认。
  • 据我所知,您的发现是正确的。

标签: javascript global-variables closures scope


【解决方案1】:

局部变量和正式函数参数将始终覆盖全局变量(或在更高范围内声明的其他变量)。然而,除了函数调用期间,这些局部变量实际上并不存在。

要查看这一点,请将任何 全局 变量 ab 替换为其大写等效项(将任何本地重新声明或使用小写),您将发现你的代码是一样的。

【讨论】:

  • 谢谢,我想了很多。我对“为什么”更感兴趣,但在回复@jovan 时我意识到了答案。再次感谢。
【解决方案2】:

没有。 local 作用域不会覆盖 global 作用域,直到调用函数之后。

For Example:

a = 3;
b = 2;

function line(x) {
    a = 5;
    b = 4;

    return a*x + b;
}

// returns 19 by referencing "global a = 3"
alert(line(a));

b = line(a) - b;

// returns 25 by referencing "local a = 5"
alert(b);

在调用 function line(x) 后,忽略 var 会忽略 global 变量(同名)。

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多