参考:
http://www.blogjava.net/baoyaer/articles/105921.html
http://zhidao.baidu.com/link?url=8swl8GsS3UlFcNqxXBPI0LdpIzKx0WSxP-idnhA9oCZElLY8NMwAsiIljfyRuzp0lrBeX72SoufdDUOHc0r5D_
程序:
function printVar(v){ document.write(v+ '<br>'); } printVar("*****1******"); var var10 = 0; printVar(var10 ); var var11 = 1; function foo1() { printVar(var11 ); var var11 = 1; } foo1(); printVar("*****2******"); var20 = 0; printVar(var20 ); var21 = 1; function foo2() { printVar(var21); var21 = 1; } foo2(); printVar("****3*******"); var30 = 0; printVar(var30 ); var31 = 1; function foo3() { printVar(var31); var var31 = 1; } foo3(); printVar("****4*******"); var40 = 0; printVar(var40 ); var41 = 1; function foo4() { printVar(var41); var var41 = 4; printVar(var41); } foo4(); printVar(var41);
输出:
*****1****** 0 undefined *****2****** 0 1 ****3******* 0 undefined ****4******* 0 undefined 4 1
总结:
1.如果变量均强制使用var,并且变量定义在前,使用在后的话,JS中的使用域很好理解,与其他语言没有差别。
2.如果内部未使用var,则程序会向上层查找变量定义;
3.如果在本层中先使用,后定义,变量将会undefined;(尤其要注意)