<script type="text/javascript">
/*题目1*/
// a();
// function a(){ //函数声明
// console.log('a');
// }
// b();
// var b = function(){console.log('b')} //函数表达式
/*题目2*/
var x=1,y=2; //变量1
var z = function(){
var x = 1; //变量2
return {
x:x,
y:function(a,b){
x = a+b
},
z:function(){
return x;
}
}
}
a = z();
a.y(x,y); //改变的是变量2
alert(a.z());
alert(a.x);
alert(x);
</script>
<script type="text/javascript"> /*题目1*/ a(); //打印出“a” function a(){ //函数声明提升,在js引擎执行的时候,先执行的这个函数的定义。所以上面的a(),打印出“a” console.log('a'); } b(); //提示b不是function var b = function(){console.log('b')} //函数表达式,只是将b的定义放了上去,赋值的部分运行到这一步才会执行。 /*题目2*/ var x=1,y=2; var z = function(){ var x = 1; return { x:x, y:function(a,b){ x = a+b }, z:function(){ return x; } } } a = z(); //z()返回一个object,并赋值给a a.y(x,y); //x y取全局变量下的x y,在执行y函数的时候,y函数内部没有变量x,根据原型链往上找,找到了z函数内的变量x,将结果3赋给这个x alert(a.z()); //z函数内部也没有变脸x,顺着原型链,找到z函数内的x,返回3,所以弹出3 alert(a.x); //访问a的静态属性x,x在初始化时被赋值为1,所以弹出1 alert(x); //全局变量下的x没有变,弹出1 </script>