Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript var总是覆盖全局变量吗?_Javascript_Global Variables_Closures_Scope - Fatal编程技术网

Javascript var总是覆盖全局变量吗?

Javascript var总是覆盖全局变量吗?,javascript,global-variables,closures,scope,Javascript,Global Variables,Closures,Scope,假设从local变量中省略var将 如果同样缺少var,则始终覆盖同名的全局? 另外,将var与创造性许可一起使用是否有任何好处 因此有一个参考框架,以下是我的发现 根据我为之创作的谜语 在, 从a=5中省略var将覆盖其全局对应项 b在local和global 底部的alert()返回5*5+4+15 4是本地的b。15是第25行声明的全局b 在, 从b=4中省略var将覆盖其全局对应项 a在local和global 底部的alert()返回5*3+4+4- 5是本地a。3是第11行声明

假设从
local
变量中省略
var

如果同样缺少
var
,则始终覆盖同名的
全局

另外,将
var
与创造性许可一起使用是否有任何好处

因此有一个参考框架,以下是我的发现
根据我为之创作的谜语

在,

  • a=5
    中省略
    var
    将覆盖其
    全局
    对应项
  • b
    local
    global
  • 底部的
    alert()
    返回5*5+4+15
  • 4是本地的
    b
    。15是第25行声明的
    全局
    b
在,

  • b=4
    中省略
    var
    将覆盖其
    全局
    对应项
  • a
    local
    global
  • 底部的
    alert()
    返回5*3+4+4-
  • 5是
    本地
    a
    。3是第11行声明的
    全局
    a
在,

  • 从两个
    local
    变量中省略
    var
    将覆盖所有
    global
    对应变量
  • 局部
    全局
    变量之间没有区别
  • 底部的
    alert()
    返回5*5+4+4
  • 只能识别
    函数中声明的变量

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


要看到这一点,请将任何全局变量
a
b
替换为其大写等效项(将任何局部重新声明或使用保留为小写),您将发现代码的工作方式相同。

否。
局部
范围在调用函数之前不会覆盖
全局
范围


一旦调用
函数行(x)
,省略
var
将忽略
全局
变量(名称相同)。

它们被称为小提琴,而不是谜语;)你是在问还是在说?请在你的问题中加入相关的代码片段,而不仅仅是对jsfiddles的引用。@ToddMotto只是展示我的发现并要求确认。从我看来,你的发现是正确的。谢谢,我也这么认为。我对“为什么”更感兴趣,但当我回复@jovan时,我意识到了答案。再次感谢。
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);