为什么警报不起作用?

问题描述:

我想知道当使用var来声明变量时有什么区别。我用下面的代码:为什么警报不起作用?

<body> 
    <h1>New Web Project Page</h1> 
    <script type="text/javascript"> 
     function test(){ 
      a = "hello"; 
      var b="world"; 
     } 
     alert(a); 
      alert(b); 


    </script> 
</body> 

为什么警报不工作,无论何时使用JavaScript中var声明一个变量有什么区别。

alert因为,在b的情况下,它不会在正确的范围,并在a的情况下,还没有被实例化的存在,因为你还没有被调用的函数test

不起作用

var创建一个变量,它在调用它的范围内是局部的。没有var你创建一个全局变量。

function fn () { 
    var x = 0; // this variable is local to the function fn 

    y = 10; // this variable is global and can be accessed 
      // from anywhere after you call fn 
} 

一般来说,除非你不想使用全局变量一个很好的理由。也就是说,你想用var来创建所有的变量。只将变量放在需要的范围内可以更容易理解和维护代码。这也有助于缓解“魔术变数”问题。哪里有刚出现的变量,但是你不清楚从哪里出来。它还使调试代码变得更容易,因为在JavaScript中,不存在的变量会被即时创建。但是,如果您只通过var和像jsLint这样的工具使用局部变量,那么您将不会遇到变形名称中出现拼写错误的问题,从而将您的代码抛出怪物。

你没有调用test()函数。当排除var时,变量变为全局变量,因此它们可用于所有代码。

+2

即使他做了'b'仍然没有定义 – tobyodavies 2012-04-17 05:00:23

声明一个没有var的变量使其成为全局的,所以任何东西都可以访问它。您的警报不起作用的原因是因为您永远不会拨打test(),所以ab从不分配。如果你确实打电话test(警报之前),b将被定义,并且a应该读取你好。

A great resource on variables and scoping.

关于使用“无功”已经回答了here

至于为什么你的警告不起作用,那是因为你还没有所谓的完全一样的问题“测试()”函数。它刚创建......它什么都不会做。您需要调用它才能填充变量。