首页 新闻 会员 周边 捐助

JS 中 renturn function(){}

0
悬赏园豆:5 [已解决问题] 解决于 2014-08-19 10:19
1    var name = "the window";
2         var object = {
3             name: "123",
4             getNameFunc: function () {
5                 return function () {
6                     return this.name;
7                 };
8             }
9         };
   alert(object.getNameFunc()());

输出结果是 the window

 

实在不明白 renturn function(){}这个代码的意思,还有谁能给写个作用域链的伪代码?

CTRA王大大的主页 CTRA王大大 | 初学一级 | 园豆:30
提问于:2014-08-19 09:22
< >
分享
最佳答案
1

这个就涉及到函数的作用域问题。首先,函数的作用于是申明函数的作用域。再来看function () { return this.name; },这个函数是作为返回值回去的,导致申明它的作用域是window,所以在这个函数内部,这个this代表window,那么这个函数的实际的执行结果会是return window.name。所以是你看到的结果。

收获园豆:5
幻天芒 | 高人七级 |园豆:37207 | 2014-08-19 09:52
getNameFunc: function () {
     return function () {
                 return function () {
                     return this.name;
                 };
              };
             }

结果一样吗?

你的意思函数中嵌套return function(){} 就直接给window了吗?

再问下

CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 09:56

@凡图: 是的,不过调用方式就得变化了,alert(object.getNameFunc()()());

幻天芒 | 园豆:37207 (高人七级) | 2014-08-19 10:18

@幻天芒: 感谢!!!

CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 10:19

@幻天芒: 能在问下,这个renturn function有啥具体应用吗?就是在什么场合用?为了避免或优化什么用呢?

CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 10:24

@凡图: 话说,还真的很少用到这样的场景。不过如果要动态设置函数的作用域的话,就可以采用这样的方式了~

幻天芒 | 园豆:37207 (高人七级) | 2014-08-19 11:23

@幻天芒: 好吧,谢了!哥们JS搞得不错啊。

CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 11:25

@凡图: 额,见笑了。我还没入门...

幻天芒 | 园豆:37207 (高人七级) | 2014-08-19 11:30

@幻天芒: 先会输出,再会用,最后就是写脚本,改别人框架。。。JS前景不错。以后我的问题多多回答下哈

CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 11:33

@凡图: 多多交流!

幻天芒 | 园豆:37207 (高人七级) | 2014-08-19 11:58
其他回答(2)
0

name是全局变量输出是上边的值吧  http://www.100sucai.com/code/169.html

1565783227 | 园豆:227 (菜鸟二级) | 2014-08-19 09:25

能如题回答么

支持(0) 反对(0) CTRA王大大 | 园豆:30 (初学一级) | 2014-08-19 09:32
0

闭包

骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2014-08-19 09:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册