<html>
<script type="text/javascript">
/*作用域
在js中,函数嵌套是非常普遍的,在函数嵌套中,
对变量是如何寻找的?
答:首先在函数内部寻找,如果需找不到,则在外层寻找。
直到……全局(window)区域.从里往外寻找
*/
var c=5;
function t1(){
var d=6;
function t2(){
var e =7;
alert(c+d+e);
}
t2();
}
//t1();//18
function t3(){
var d=6;
function t2(){
var e =7;
d =3;
alert(c+d+e);
}
t2();
}
//t3();//15
/*声明变量,var的作用
var 是在函数运行的上下文中,声明一个变量,
如果不加var,则是一个赋值操作,
但是不要狭隘的理解为声明了一个全局变量
*/
//alert(window.d);
//alert(window.e);
function t(){
d=5;//d没有加var,仅仅是一个赋值操作,寻找
//t域内的函数,如果没找到,继续向外寻找……到window
//如果window中还没有d,创建d变量并赋值
var e=6;
}
//t();
//alert(window.d);
//alert(window.e);
function t4 (){
var d;
function t2(){
d=5;
e=6;
}
t2();
}
//t4();
//alert(window.d);//undefined
//alert(d);// d is not defined
//alert(e);
/*
注意:以window.xxx引用全局变量,寻找不到,
作为window的属性不存在,返回undefined。
直接以xxx引用,寻找不到,则报xxx is not defined
*/
var s1='g';
function t5(){
alert(s1);//g
alert(s2);//is not defined
s2 = 'lo';
}
// t5();
/*
在t5中寻找s2,没有找到s2的变量声明,到window上寻找s2的变量声明,
还是没有找到,报is not defined
*/
function t6(){
alert(s1);//g
alert(s2);//undefined
var s2 = 'lo';
}
t6();
/*
解释:
js代码自上而下执行,但是js代码的整体运行分为:
词法分析期和运行期
自上而下执行之前,先有一个词法分析过程。
词法分析t6函数:
声明了s2变量,但是没有对s2赋值,只有在运行期才赋值
因此s2=undefined。
执行t6函数:
alert(s1);//g
alert(s2);//undefined
s2 = 'lo';
*/
</script>
</html>