首页 新闻 赞助 找找看

<javascript> return函数

0
悬赏园豆:100 [待解决问题]
 1         var f1 = function (func1) {
 2         //    return function () {
 3                 func1.apply();
 4          //   };
 5 
 6         }
 7 
 8 
 9 
10         $(window).resize(
11         f1(function () { alert('123'); }));

1到6行的代码我的理解是给匿名函数取了个名字叫f1。应该我下面事件调用应该就直接alert出来呀!为什么没有出来,而且加载页面既然就出来了。

还有一个问题为什么我调动浏览器的大小事件都不触发了!

 

我把注释内容取消就可以了! 为什么一定要在f1函数中建立一个匿名函数前面还要加个return。

我应该怎么理解呀!

求大神呀

认真只为输的主页 认真只为输 | 初学一级 | 园豆:104
提问于:2015-12-21 18:35
< >
分享
所有回答(5)
1

return是为了返回一个值,var f1 = function (func1) {}这样的,你想想赋值一般是a=b,吧b换成了function(func1){},在function中,你没有return,那默认为没有值,或者你赋值失败,故你在下面调用的时候无法弹出了。。。

如此低调的男人 | 园豆:842 (小虾三级) | 2015-12-21 20:37

不好意思,谢谢。虽然你回答错误了!我查了下 不是return的原因 是括号的原因。我在onresize调用方法时有括号就必须要有return。所以onresize事件的值是return后面的匿名函数 不是等号后的匿名函数!

支持(0) 反对(0) 认真只为输 | 园豆:104 (初学一级) | 2015-12-21 21:06
0

不好意思,谢谢。虽然你回答错误了!我查了下 不是return的原因 是括号的原因。我在onresize调用方法时有括号就必须要有return。所以onresize事件的值是return后面的匿名函数 不是等号后的匿名函数!

认真只为输 | 园豆:104 (初学一级) | 2015-12-21 21:06

原来你已经发现了,你传递的并不是一个函数

支持(0) 反对(0) jello chen | 园豆:7306 (大侠五级) | 2015-12-21 21:57
0

resize那里的问题吧,单独写看看

jello chen | 园豆:7306 (大侠五级) | 2015-12-21 21:52
0

把逻辑分开来看:

var f1 = function (func1) {
  func1.apply();
}
//等价于
var f1 = function (func1) {
  func1.apply();
  return undefined; //函数的默认返回值
}


$(window).resize(f1(function () { alert('123'); }));
//其中下面这段代码等价于
f1(function () { alert('123'); })等价于执行alert,因为f1()表示函数调用。

所以就导致你的resize事件代码成了以下这种情况:
$(window).resize(undefined);
当然就没反应了。
幻天芒 | 园豆:37175 (高人七级) | 2015-12-22 08:54
0

楼上正解!

$(window).resize(),括号里面所期待的参数是一个function,

而楼主所给的参数是调用f1所得到的返回值,按照f1的定义调用f1以后所得的返回值是undefined,这样相当于没有绑定resize事件。

 

但是当你把注释去掉以后,调用f1得到的返回值就是一个function,那就相当于给resize事件绑定了这个返回的function,自然能alert出来了。

脚本王子 | 园豆:779 (小虾三级) | 2015-12-28 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册