var总是覆盖全局变量吗?

时间:2014-01-26 09:25:31

标签: javascript global-variables closures scope

假设从var变量中省略local是否正确?
总是覆盖同名的global,如果它也缺少var
另外,使用var创作许可证是否有任何优点。

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

Riddle #3

  • 忽略来自var的{​​{1}}会覆盖其a = 5对方
  • globalblocal
  • 之间保持两极分化
  • 底部的global返回5 * 5 + 4 + 15
  • 4是alert() local。 15是第25行声明的b global

Riddle #2

  • 忽略来自b的{​​{1}}会覆盖其var对方
  • b = 4globala
  • 之间保持两极分化
  • 底部的local返回5 * 3 + 4 + 4 -
  • 5是global alert()。 3是第11行声明的local a

Riddle #1

  • 忽略global个变量中的a会覆盖所有var个对应
  • localglobal变量之间没有区别。
  • 底部的local返回5 * 5 + 4 + 4
  • 只识别global内声明的变量

2 个答案:

答案 0 :(得分:0)

局部变量和形式函数参数将始终覆盖全局变量(或在更高范围内声明的其他变量)。但是,除了函数调用的持续时间之外,这些局部变量实际上并不存在。

要查看此内容,请将任何全局变量ab替换为大写等效项(保留任何本地重新声明或以小写形式使用)你会发现你的代码工作方式相同。

答案 1 :(得分:-2)

没有。 local在调用函数之后,Scope不会覆盖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);

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