关于javascript,私有作用域中this的指向问题,谢谢各位!!

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="../lib/jquery.min.js"></script>
        <script src="https://cdn.bootcss.com/angular.js/1.3.6/angular.js"></script>
        <script src="https://cdn.bootcss.com/angular.js/1.3.6/angular-route.js"></script>
        <title>图灵机器人</title>
        <script>
            var name = "Top";
            var obj = {
                name:"My Object",
                sayName:function(){
                    alert(this.name);
                }
            }
            obj.sayName();//My Object
            (obj.sayName)();//My Object
            (obj.sayName = obj.sayName)();//Top
        </script>
    </head>
    <body>
    </body>
</html>

这段代码的第三种写法为什么this指向的是全局变量?这第三种写法等价于怎样的写法,我改怎样去理解第三行的这段写法?谢谢各位大神!!

阅读 2.2k
3 个回答

第三句话是赋值表达式,返回的是赋值后的结果。比如a = b,这只是一个赋值语句,把b中引用的值赋给了a,操作完之后就结束了,之后跟a是什么没有关系。主要是赋值表达式有副作用,它返回了b引用的值。比方说b的值是1,那么a = b它的返回结果就是1。

//这句话操作完成返回的结果是obj.sayName的引用
(obj.sayName = obj.sayName)();
//相当于如下
(function(){
    alert(this.name);
})();
//匿名函数表达式立即执行,this指向window
  ( obj.sayName = function(){
                alert(this.name);
            })();

前两种写法,都是通过obj调用obj的方法sayName方法
第三种写法,自认为等同于:
var tmp = obj.sayName;
tmp();
这个时候tmp已经是全局变量了,相当于调的是window.tmp(),那this肯定是指向window了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题