<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> new document </title> <meta name="generator" content="editplus" /> <meta name="author" content="" /> <meta name="keywords" content="" /> <meta name="description" content="" /> </head> <body> <mce:script type="text/javascript"><!-- //JavaScript里没有块级作用域。 /* 没有块级作用域 注意,和C,c++以及Java不同,JavaScipt没有块级作用域。函数中声明的所有 变量,无论是在哪里声明的,在整个函数中它们都是有定义的。在下面的代码中. 变量i、j和k的作用域是相同的,它们三个在整个函数体中都有定义。如果这段代 码事用c、c++或Java编写的。情形就不是这样了 */ function test(o) { var i=0; //在整个函数中有定义 document.write("j= "+j+"<br>"); //j 有定义,但没有初始化 document.write("k= "+k+"<br>"); //k 有定义,但没有初始化 if (typeof o=='object') { var j=0; //j到处都有定义,不仅限于这个代码块 for (var k =0 ; k<10; k++) { document.write("k= "+k+"<br>");//k到处都有定义,不仅限于该循环 } document.write("k= "+k+"<br>"); //k仍旧有定义,输出10; } document.write("j= "+j+"<br>"); //j 仍旧有定义 } test(document); //这一规则(即函数中声明的所有变量在整个函数中都有定义)可以产生惊人的效果。下面的代码说明了这一点: var scope = 'global'; function f() { alert(scope); //显示"undefined",而不是'global' var scope = 'local'; //变量在此处被初始化,但到处都有定义 alert(scope);//显示"local" } f(); //你可以能认为对alert()的第一次调用会显示出"global",因为声明局部变量的var 语句还没有被执行。但是,由于这个作用域规则的限制,输出的并不是"global",局部变量在整个函数体内都是有定义的,这就意味着在整个函数体中都隐藏了同名的全局变量。虽然局部变量在整个函数体中都是有定义的,但是在执行var语句之前,它是不会被初始化的,因此上面的 例子中,函数f和下面的函数等价: function f2() { var scope ;//局部变量在函数开通声明。 alert(scope);//此处该变量有定义,但值仍为'undefined' scope='local';//现在我们初始化该变量,并给他赋值 alert(scope);//此处该变量具有值。 } // --></mce:script> </body> </html>