<!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <script type="text/javascript"> /* **JAVASCRIPT变量作用域 function add(a, b){ var sum = a+b; return sum; }; var rs = add(2,3); console.log(rs); console.log(sum); //因为这个sum在函数中是的作用域是add函数域,在函数外是没有办法使用的,所以这个 //sum在外部使用的时候是没有定义过的;故会输出这个sum是没有定义的; function add(a,b){ sum = a+b; //在这个函数中sum被隐式的声明成了全局变量故是windows对象的变量,在外部是可 //以使用的; return sum; } var rs = add(2,3); console.log(rs); console.log(sum); */ //没有块级作用域 var a= 8; var foo = function(){ console.log(a); // var a = 5; console.log(a); }; foo(); /* 输出的结果: undefined 5 结论:由foo函数的内的console.log(a)可以知道,在javascript中是没有块级作用域的,这和c/C++或是 别的一些语言有所不同的。如果在c/c++中使用如下的代码是没有任何的问题的, 代码如下: #include "stdio.h" int i = 109; //这是i是全局变量 void foo(){ printf("这个i变量是全局的变量%d ",i); int i = 4; //这个i是局部变量 printf("函数中的定义的的i变量%d ",i); } void main(){ foo(); } /*输出结果 109 函数中的定义的的i变量4 Press any key to continue 因为局部变量在整个函数foo()内都有定义的,整个函数中隐藏了全局变量。虽然局部变量在整个函数体中有定义的,但在var语句之后,所以不会被初始化。所以最好在函数的顶部声明函数中所有用到的变量 */ </script> </body> </html>