根据作用范围不同,变量有全局变量和局部变量两种
JavaScript语言没有块范围:
因为JavaScript语言没有块范围,有时会出现一些非常奇怪的结果:
变量作用范围在进行HTML事件处理时一样有效:
- <script>
- //定义全局变量test
- var test = "全局变量";
- function checkscope( )
- {
- var test = "局部变量";
- alert(test);
- }
- checkscope( );
- //在函数里定义的变量为局部变量,局部变量只在函数内有效。
- //如果局部变量和全局变量用相同的变量名,则局部变量将覆盖全局变量
- </script>
<script>
//定义全局变量test
var test = "全局变量";
function checkscope( )
{
var test = "局部变量";
alert(test);
}
checkscope( );
//在函数里定义的变量为局部变量,局部变量只在函数内有效。
//如果局部变量和全局变量用相同的变量名,则局部变量将覆盖全局变量
</script>
JavaScript语言没有块范围:
- <script>
- function test(o)
- {
- //定义变量i,变量i的作用范围是整个函数
- var i = 0;
- if (typeof o == "object")
- {
- //定义变量j,变量j的作用范围是整个函数内,而不是if块内。
- var j = 5;
- for(var k = 0; k < 10; k++)
- {
- //k的作用范围是整个函数内,而不是循环体内
- document.write(k);
- }
- }
- //即使出了循环体,k的值依然存在
- alert(k + "/n" + j);
- }
- test(document);
- </script>
<script>
function test(o)
{
//定义变量i,变量i的作用范围是整个函数
var i = 0;
if (typeof o == "object")
{
//定义变量j,变量j的作用范围是整个函数内,而不是if块内。
var j = 5;
for(var k = 0; k < 10; k++)
{
//k的作用范围是整个函数内,而不是循环体内
document.write(k);
}
}
//即使出了循环体,k的值依然存在
alert(k + "/n" + j);
}
test(document);
</script>
因为JavaScript语言没有块范围,有时会出现一些非常奇怪的结果:
- <script>
- var scope = "全局变量";
- function test()
- {
- alert(scope);
- var scope = "局部变量";
- alert(scope);
- }
- test();
- //代码第一次输出的scope值并不是"全局变量",而是undefined。知识这是因为scope在test函数中已经被重新定义了,局部变量在test函数中将全局有效,即在scope还没定义之前全局变量scope依然被覆盖。
- </script>
<script>
var scope = "全局变量";
function test()
{
alert(scope);
var scope = "局部变量";
alert(scope);
}
test();
//代码第一次输出的scope值并不是"全局变量",而是undefined。知识这是因为scope在test函数中已经被重新定义了,局部变量在test函数中将全局有效,即在scope还没定义之前全局变量scope依然被覆盖。
</script>
变量作用范围在进行HTML事件处理时一样有效:
- <script type="text/javascript">
- var x = "全局变量";
- </script>
- <form action="#" method="get">
- <input type="button" value="局部变量"
- onclick="var x = '局部变量'; alert('输出x局部变量的值:' + x);" />
- <input type="button" value="全局变量 "
- onclick="alert('输出x全局变量的值: ' + x);" />
- </form>