为什么警报不起作用?
问题描述:
我想知道当使用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
时,变量变为全局变量,因此它们可用于所有代码。
答
声明一个没有var
的变量使其成为全局的,所以任何东西都可以访问它。您的警报不起作用的原因是因为您永远不会拨打test()
,所以a
或b
从不分配。如果你确实打电话test
(警报之前),b
将被定义,并且a
应该读取你好。
即使他做了'b'仍然没有定义 – tobyodavies 2012-04-17 05:00:23