劳驾帮忙看一下以下js代码段的运行结果是什么,为什么
麻烦帮忙看一下以下js代码段的运行结果是什么,为什么
运行结果为什么是 "The Window"
------解决方案--------------------
------解决方案--------------------
这个问题的玄机在于赋值操作“=”的返回值是什么,var a = b;返回的是b。由于object.getNameFunc是个函数,所以(object.getNameFunc = object.getNameFunc)返回的就是一个匿名函数,你可以认为这个函数赋值给了一个临时变量TempFunc,这就是个函数复制的过程,TempFunc是全局的变量,所以其this指向window。这个过程应该等效于
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();