javascript使用var关键字外部函数

时间:2012-08-08 17:06:59

标签: global-variables local-variables javascript

我理解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

7 个答案:

答案 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.