JavaScript 在函数之外使用 var 关键字

javascript using var keyword outside functions

本文关键字:var 关键字 函数 JavaScript      更新时间:2023-09-26

我理解函数内部的var关键字的含义,但现在我试图了解函数外部var关键字的目的是什么。我做了一些测试(见下文),没有区别。那么,如果你把var关键字放在函数之外有什么区别呢?

1.

example = 1;
function test(){  
  var example = 2;
}
test();
alert(example); //alert 1 no matter if example=1 or var example=1 before function

阿拉伯数字。

example = 1;
function test(){  
  example = 2;
}
test();
alert(example); //alert 2  no matter if example=1 or var example=1 before function

3.

var example = 1;
function test(){   
  alert(example);   
}
test(); //always alert 1, no matter if var example=1 or example=1 before function

关键字 var 在当前范围内声明一个变量(好吧,从技术上讲,在相同的闭包中,但现在让我们保持简单)

由于您的函数(测试)和变量(示例)都是在"全局"范围内声明的,因此它们都可以相互访问,这意味着函数test可以访问变量example

在您的第一个示例中,您已经声明了一个名为 example 的新 var,这意味着现在当您调用 var 示例(在方法内部)时,它将引用此变量。

有区别!

https://stackoverflow.com/a/1471738/211070 看到这个答案,但基本上:

由于变量声明使用 DontDelete 标志创建属性,因此 var x = 1 和 x = 1 之间的差异(在全局范围内执行时) 是前一个 - 变量声明 - 创建 DontDelete'able 属性,而后者没有。结果,创建了属性 通过这个隐式赋值,然后可以从全局中删除 对象,前一个 - 通过变量声明创建的那个 - 不可能。

只要您不处于严格模式,全局空间就没有真正的区别。

也就是说,您仍应将var用作良好的编程实践。自动定义的变量是邪恶的。

我相信

如果你在一个函数中放置一个变量,它只能像 PHP IF 语句一样单独在该函数中使用,就像你把一个变量与函数一起放出来一样,那么它可以在多个函数中使用 - 就像页面范围内的变量一样。

var -Keyword 在函数内使用时与在函数外部使用时完全相同:它将新变量绑定到当前范围。在函数的情况下,作用域是函数。在函数之外使用全局作用域。在浏览器中,该全局作用域通常是 window -Object。

LG,

弗洛

var 关键字声明当前作用域中的变量。如果没有它,您将在 window 对象上自动声明一个新属性,或者在更高范围内访问和修改同名变量(如果存在)。在您的示例中,只有全局作用域和内部函数作用域,因此就您的目的而言,全局作用域中的var example = 1在技术上与仅example = 1相同。但是,如果上述所有代码都是在其他函数作用域内执行的,则前 2 个示例将声明全局 example 属性,而第三个示例将声明该作用域的本地变量。

> 1)这提醒1的原因是,即使您事先调用了test()函数,它本身也会调用并创建自己的闭包,并在其中声明一个单独的var example = 2;。(因此,您的警报看不到它,它只能看到 1)。 现在,如果您这样做了:return example = 2;您会注意到警报(示例)=== 2。这是因为您从闭包中取出了示例,并且它影响了上一个示例变量。

example = 1;
function test(){  
    var example = 2;
}
test();
alert(example);
2

在这里,您没有在函数内部创建新变量,因此它能够访问(通过闭包)它外部的变量示例,并将其更改为2。

example = 1;
function test(){  
  example = 2;
}
test();
alert(example); //alert 2  no matter if example=1 or var example=1 before function

3)最后一个是"闭包"在这里如何运作的一个很好的例子。变量,不像我们说function ()必须在尝试访问它们的东西之上声明。另一方面,函数则没有。因此,尽管var example = 1可能低于function test() { }本身,但这并不重要。重要的是它是在 CALL to test() 之前声明的。这是创建闭包时,它将自己包裹在它可以看到/访问的任何变量等周围。

// so this ...
var example = 1;
function test(){   
    alert(example);   
}
// and this work ...
function test(){   
    alert(example);   
}
var example = 1; // <-- notice it's still above the test() func call, it can still see example
test(); //always alert 1, no matter if var example=1 or example=1 before function
// if var example = 1; was down here below it, it would alert "undefined", this is because
// the variable was not available within the scope when test() was called.