预解析:
1.function a (){........} 在作用域中,函数跟var声明变量是一样的时候,只会预解析函数,
此时函数没有执行
输出是直接弹出函数体,function a(){
alert(1);}
function a(){
alert(1);
}
var a;
alert(a);
2.预解析:
(1)定义:var x,
function a(){....}
(2)执行 X=5;
a===>函数内新的作用域===>需要重新定义与执行
(1)定义:var x;//此时只定义没有赋值
(2)执行 console.log(x);此时x是undefind; 之后给x赋值,x=10(局部的)
因此输出undefind与5;
var x =5;
a();
function a(){
console.log(x);
var x =10;
}
console.log(x);
3.预解析
(1)定义 function a(){......}
(2)执行 a()===>新的作用域===>定义 var x===>console.log(x)===>x=10 所以输出undefined
console.log(x);会显示x未定义
因此输出undefined与X未定义
a();
function a(){
console.log(x);
var x=10;
}
console.log(x);
4.预解析
(1)定义 function a(){console.log(40);} 因为函数与var定义的一样
(2)执行 console.log(a);此时输出函数体
var a=10;
console.log(a); 输出10;
function a(){console.log(20);} 函数体没调用,不执行不用管
console.log(a); 此时a还是10,输出10;
var a =30;此时a重新定义为30;
console.log(a); 输出30
function a(){console.log(40);}// 函数体没调用不执行,不用管
console.log(a); 输出30
console.log(a);
var a=10;
console.log(a);
function a(){console.log(20);}
console.log(a);
var a=30;
console.log(a);
function a(){console.log(40);}
console.log(a);