function show(){ this.a="1";//我的理解是 这里的 this 指bb alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined" show2(); function show2(){ this.b="2"; alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ...... show3(); function show3(){ this.c="3"; alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined" show4(); function show4(){ this.d="4"; alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined } } }
刚看到网上有人对这个问题的讨论,自己的分析如下
关键点:
一般没有为函数指定调用者的时候,this指的就是全局变量this
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
当走到这一步的时候,当前的this应该指向的是 bb这个对象
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show2();
当调用show2的时候,并没有为show2指定调用者,这个时候函数里面的this应该指向的是window.
可以换一种写法,可以更加清晰的显示:
function show(){ this.a="1";//我的理解是 这里的 this 指bb alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined" this.show2 = function (){ this.b="2"; alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ...... this.show3=function (){ this.c="3"; alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined" this.show4=function (){ this.d="4"; alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined } this.show4(); } this.show3(); } this.show2(); } var bb=new show();