我理解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
2
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
答案 0 :(得分:1)
关键字var
在当前范围内声明一个变量(好吧,技术上在同一个闭包中,但现在让它保持简单)
由于您的函数(test)和变量(示例)都在'global'范围内声明,因此它们都可以相互访问,这意味着函数test
可以访问变量example
在您的第一个示例中,您已声明了一个名为example的新var,这意味着现在当您调用var示例(在方法内)时,它将引用此变量。
答案 1 :(得分:1)
有区别!
请参阅此答案https://stackoverflow.com/a/1471738/211070,但基本上是:
由于变量声明使用DontDelete标志创建属性,因此 var x = 1和x = 1之间的差异(在全局范围内执行时) 是前一个 - 变量声明 - 创建DontDelete'able 财产,后者没有。结果,创造了财产 然后可以从全局中删除此隐式赋值 对象和前者 - 通过变量声明创建的对象 - 不可能。
答案 2 :(得分:0)
只要你没有处于严格模式,全球空间就没有真正的区别。
那就是说,你仍然应该使用var
作为良好的编程习惯。自动定义的变量是邪恶的。
答案 3 :(得分:0)
我相信如果你把一个var放在一个函数中它只能在那个函数中单独使用,就像PHP IF语句一样,就好像你把一个var放在函数中那么它可以用在多个函数中 - 就像一个页面范围内的变量。
答案 4 :(得分:0)
var
- 关键字在函数中使用时与在其外部使用时完全相同:它将新变量绑定到当前范围。在函数的情况下,范围是函数。在函数外部使用全局范围。在浏览器中,该全局范围通常是window
- 对象。
LG,
FLO
答案 5 :(得分:0)
var
关键字在当前范围中声明了一个变量。如果没有它,您将自动在window
对象上声明一个新属性,或者在更高的范围内访问和修改同名变量(如果存在)。在您的示例中,只有全局范围和内部函数范围,因此,就您的目的而言,全局范围内的var example = 1
在技术上与example = 1
完全相同。但是,如果上面的所有代码都是在其他函数范围内执行的,前两个示例将声明一个全局example
属性,而第三个示例将声明该范围的本地变量。
答案 6 :(得分:0)
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 之前声明为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.