为什么警报不起作用?

时间:2012-04-17 04:58:21

标签: javascript

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

4 个答案:

答案 0 :(得分: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这样的工具,那么你就不会遇到变量名拼写错误的问题,从而使你的代码摆脱了怪癖。

答案 1 :(得分:2)

声明没有var的变量使其成为全局变量,因此任何东西都可以访问它。您的提醒无效的原因是由于您从未致电test(),因此永远不会分配ab。如果你打电话给test(警报之前),b将是未定义的,a应该是你好。

A great resource on variables and scoping.

答案 2 :(得分:1)

您没有调用test()函数。排除var后,变量将变为全局变量,因此它们可供所有代码使用。

答案 3 :(得分:1)

关于使用'var'的完全相同的问题已被回答here

关于警报不起作用的原因,这是因为您没有调用'test()'函数。它刚刚创建......它什么都不做。你需要调用它来填充变量。