<html>
<script type="text/javascript">
function a(b){
alert(b);
function b(){
alert(b);
}
b();
}
//a(1);
/*ao{b=fun}*/
function aa(b){
alert(b);
b=function (){
alert(b);
}
b();
}
aa(1);
/*
0:ao={}
1:分析参数 ao={b=undefined},马上变成ao={b=1}
2:分析var声明,没有
3:分析函数声明,没有
(注:b=function(){}是一个赋值过程,在执行期才有用)
*/
/*词法分析
分析3样东西
第一步:先分析参数
第二步:再分析变量声明
第三步:分析函数声明
一个函数能使用的局部变量,就从3步而来
具体步骤:
0:函数运行前的一瞬间,生成active object
1:a.把声明的参数作为ao对象的属性,值都是undefined
b.接收实参,形成ao对应属性的值
2:分析变量声明,如var
如果ao上还没有此变量声明,则把此变量作为ao属性,
值是undefined
如果ao上已经有了此属性,则不做任何影响
3:分析函数声明,如function t(){}
则把此函数作为ao的属性
注:如果此前ao已经有了t属性,则以前的t被覆盖
*/
function t1(age){
alert(age);
}
//t1(1);
function t2(age){
var age = 99;
alert(age);
}
//t2(1);
function t3(g){
var g = 'hello';
alert(g);
function g(){
}
alert(g);
}
//t3();
</script>
</html>