读书人

劳驾帮忙看一下以下js代码段的运行结果

发布时间: 2013-07-01 12:33:04 作者: rapoo

麻烦帮忙看一下以下js代码段的运行结果是什么,为什么


var name = "The Window";

var object = {
name: "My Object",
getNameFunc: function () {
return this.name;
}
};

alert((object.getNameFunc = object.getNameFunc)());


运行结果为什么是 "The Window"
[解决办法]

<script type="text/javascript">
<!--
var name = "I am Window";

var object = {
name: "My Object",
getNameFunc: function () {
return this.name;
}
};

var a= object.getNameFunc; //将函数从object中复制出来,这时函数的this指向window
alert(a());

//(var b=a),将返回a,同理(a=a) 返回a 所以这里返回的就是独立的匿名函数,效果等同于上面的代码
alert((object.getNameFunc = object.getNameFunc)());
//-->
</script>


[解决办法]
这个问题的玄机在于赋值操作“=”的返回值是什么,var a = b;返回的是b。由于object.getNameFunc是个函数,所以(object.getNameFunc = object.getNameFunc)返回的就是一个匿名函数,你可以认为这个函数赋值给了一个临时变量TempFunc,这就是个函数复制的过程,TempFunc是全局的变量,所以其this指向window。这个过程应该等效于

var tempFunc = (object.getNameFunc = object.getNameFunc);
tempFunc();

读书人网 >JavaScript

热点推荐