javascript - 这道js题中this指向的问题
PHP中文网
PHP中文网 2017-04-11 11:35:19
[JavaScript讨论组]
        var a=10;                        
        var foo={                  
               a:20,            
               bar:function(){                     
                      var a=30;                       
                      return this.a;                      
               }                      
         }                        
         foo.bar()                        
         //20
                    
         (foo.bar)()                      
         //20
                  
         (foo.bar=foo.bar)()                        
         //10
                    
         (foo.bar,foo.bar)()                 
         //10
        

最后两个this为什么指向window

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
迷茫

1.foo.bar=foo.bar的返回值是foo.bar的值。
赋值语句的返回值就是赋值的值。
所以 (foo.bar=foo.bar)()等同(function(){var a=30;return this.a;})()对函数的直接调用this是window。
2.(foo.bar,foo.bar)()
逗号运算符,它将先计算左边的参数,再计算右边的参数值。然后返回最右边参数的值。然后同1。

高洛峰

跑不起来呀 (foo.bar)()直接报错了。

巴扎黑

第一个是对象调用,不必解释。

第二个先看左边的括号,作用是分组,功能和以下功能差不多:

(1+2)*3;//输出9

因此调用函数的对象是foo。

第三个左边的括号同样是分组,那么先看下下面的例子:

var a=9; //控制台得到undefined,毕竟var声明没有返回值

var b;
b=9;//返回的是9

那么左边括号的赋值返回的就是函数的方法体,即function(){...}这些东西。它没有具体的名字,你可以当做是一个匿名函数,而匿名函数要执行常见有以下几种方式:

(function(){console.log(1)})();
!function(){console.log(1)}();
~function(){console.log(1)}();
-function(){console.log(1)}();
+function(){console.log(1)}();

一般是前三种,具体可以自己百度下还有那些。由此可以看出右边的括号就是执行匿名函数了,而左边的括号还起到另外一个作用,看第一种匿名函数的执行可知。没有谁调用函数,this指向window。

最后一个需要知道逗号运算符的作用。它返回的是最后一个表达式的值。这里也就是函数的方法体,然后执行匿名函数。而没有谁调用函数的时候,函数中this指向window。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号