0

我想知道在声明变量是否使用时有什么区别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>

为什么警报不起作用以及声明变量是否var在javascript中使用时有什么区别。

4

4 回答 4

4

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 之类的工具使用局部变量,您将不会遇到变量名拼写错误的问题,从而使您的代码变得异常。

于 2012-04-17T04:59:41.377 回答
2

声明一个变量而不var使其成为全局变量,因此任何东西都可以访问它。但是,您的警报不起作用的原因是您从未test()如此调用ab从未被分配。如果您确实调用test(在警报之前),b将是未定义的,并且a应该读取 hello。

关于变量和范围的一个很好的资源。

于 2012-04-17T05:00:25.477 回答
1

您没有调用该test()功能。当var被排除时,变量变为全局变量,因此它们可用于所有代码。

于 2012-04-17T04:59:54.293 回答
1

此处已回答有关使用“var”的完全相同的问题

关于为什么您的警报不起作用,那是因为您没有调用“test()”函数。它刚刚被创建......它不会做任何事情。您需要调用它以填充变量。

于 2012-04-17T05:02:54.387 回答