日期:2014-05-16  浏览次数:20342 次

麻烦帮忙看一下以下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();