<scripttype="text/javascript">alert(a);//报错</script><scripttype="text/javascript">var a =1;</script>
<scripttype="text/javascript">var a =1;</script><scripttype="text/javascript">alert(a);//1</script>
var a =1;functionfn1(){alert(a);//undefinedvar a =1;}fn1();alert(a);//1//window 1.Ao分析 {a:undefined,fn1:function(){}}//// 2. 代码执行: a = 1// // // fn1 执行 : 进入到函数内部/函数所生成的局部作用域// 1. AO分析 {a:undefined} // 2.执行// // // // // alert(a)// //
四、参数
形参:相当于隐式声明,在AO上为undefined。
实参:会在AO分析的时候,给形参一个初始值。
var a =1;functionfn1(a){alert(a);//undefined
a =2;}fn1();alert(a);//1// window 1. AO {a:undefined,fn1:function(){}}// 2. AO {a:1,fn1:funcion(){}}// fn1:// 1.AO {a:undefined}// 2.alert(a); // AO {a:2}// // // alert(a)//
var a =1;functionfn1(a){alert(a);//1
a =2;}fn1(a);alert(a);//1// window 1.{a:un,fn1:function}// 2.{a:1,fn1:function}// fn1: 1.{a:1}// 2. alert(1)// {a:2}// alert(a)
五、作用域的AO分析
先看有没有参数,实参会把形参初始化,如果只有形参,那么形参为undefined。
再看有没有变量声明。
最后看有没有函数声明,函数会把同名变量覆盖。
var age =99;functiont(age){alert(age);}t(5);//5t();//undefined// win 1.AO{age:un,t:fun}// 2. AO{age:99}// t(5): 1. AO{age:5}// 2. alert(5)// t(): 1 AO{age:un}// 2. alert(un)