niuqiang2008 发表于 2013-1-29 09:35:04

window指代全局this

学习<王者归来>时遇到的问题 ...
看代码 :

----辅助内容
function dwn(_a_){document.write(_a_ + "<br/>") ;}

疑惑
function test(){this.aa = 10 ;return function(){return 1 ;}}varaa = new test();var b = test();dwn( aa+'   ' +b )

结果是:10 function () { return 1; }

但如果代为:

function test(){this.aa = 10 ;return function(){return 1 ;}}vara    = new test();var b = test();dwn( a +'   ' +b )

结果为:function () { return 1; } function () { return 1; }

疑惑中 ,应该返回的是第二种 ,为什么this的属性名定义的和外部一样时会出现这种问题....

在变一种提交方式 ...
把代码一改一下 ..
function test(){this.aa = 10 ;return function(){return 1 ;}}var b = test();// (1)varaa   = new test();//(2)dwn( aa+'   ' +b )

执行的结果是 :function () { return 1; } function () { return 1; }

如此怪异的行为 ,我在FF调试下发现 , 在执行 (2)时 ,要从新进入test()函数,改写aa的值 ,
如果代码为
varaa   = new test(); dwn(aa)var b = test(); dwn(b) ;

也是预期的效果

我想这应该是全局变量名的问题 . 在test()函数中 this指代的是window对象 ,
在执行完varaa   = new test(); aa应该是 function(){...}
但在 var b = test()中 this.aa = 10 有从写了aa就出现了代码一的样式 ...
不知正确与否 , 望高手指正 ,
页: [1]
查看完整版本: window指代全局this