javascript的this指向???
阿神
阿神 2017-04-10 15:18:35
[JavaScript讨论组]

以下代码执行时alert输出值分别是

var foo={    
       bar:function(){        
            alert(this);    
       } 
 }; 
(foo.bar)();
(foo.bar,foo.bar)(); 
(foo.bar=foo.bar)();

(foo.bar,foo.bar)()和(foo.bar=foo.bar)();这种形式是什么意思

阿神
阿神

闭关修行中......

全部回复(1)
PHP中文网

这个结果分别是

(foo.bar)();    //foo
(foo.bar,foo.bar)();    //window
(foo.bar=foo.bar)();    //window

这里需要说明一下分组运算符、逗号运算符以及赋值运算符的执行过程。

  1. 首先逗号运算符会先对左侧表达式进行求值(evaluating)得V,然后调用内部方法GetValue,看V是不是一个Reference,如果不是直接返回V,否则对其解引用,得到最终的结果。之后同样的操作发生在右侧表达式上。最终整个逗号表达式的返回值是右侧表达式的返回值。

  2. 赋值运算符对其右侧表达式进行上述操作后得到rval并赋给左侧的变量,整个赋值表达式的返回值则是rval。

上面两个运算符最有一个解引用的过程,因此(foo.bar, foo.bar)得到的是函数function () { alert(this); },之后的调用相当于直接global域调用一个函数,this当然就是window了。

分组运算符(也就是小括号)有些不同,它会对其内部的表达式进行求值得到V,但是不会调用GetValue,也就没有了解引用过程,而是直接返回V,因此(foo.bar)就是foo.bar,后面的调用自然就把this绑定到foo之上。

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

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