JavaScript function定义问题~大神来~~

倚窗听雨丿醉无心 2015-12-31 11:34:17

function test(obj){
return obj;
}

var fun1 = function(){ alert(1) };
var fun2 = test( function(){ alert(2) } );

console.log(fun1);
console.log(fun2);

fun1();
fun2();

现在有两个问题:
1.在控制台打印出来后:

2.调用这两个方法都没问题,这两种方法定义有什么区别?
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolbirdflyfirst 2015-12-31
  • 打赏
  • 举报
回复
引用 4 楼 u013482666 的回复:
[quote=引用 3 楼 foolbirdflyfirst 的回复:] [quote=引用 2 楼 u013482666 的回复:] [quote=引用 1 楼 foolbirdflyfirst 的回复:] 这是哪家浏览器的控制台。。 一个无返回, 一个返回函数 仅此而已
浏览器是Mozilla Firefox 这和返回有关系么?我的test方法是传入什么,返回什么的啊。 fun2 是test函数执行完成的结果,就是一个匿名函数啊 fun1() , fun2() 都可以调用的到啊~ [/quote] 我看错了 你test里面不是return 传入的参数吗,我说的返回是这个地方。 fun1是函数,父域是全局window域 fun2是test执行后返回的函数 所以fun2的父域是test函数执行后生成的的域,在往上test的父域是全局window域 能想到得区别就这些。[/quote] 就像是闭包一样的么[/quote] 没错,就是利用js闭包这一特性,可以玩很多东西
function test(obj){
    self = this;
    self.i = 0;
    return function(){
      return obj.apply(self,[self.i++])
    };
}

var fun2 = test(
   function(){
      alert(this.i)
   } 
);
fun2()
fun2()
fun2()
fun2()
  • 打赏
  • 举报
回复
引用 3 楼 foolbirdflyfirst 的回复:
[quote=引用 2 楼 u013482666 的回复:] [quote=引用 1 楼 foolbirdflyfirst 的回复:] 这是哪家浏览器的控制台。。 一个无返回, 一个返回函数 仅此而已
浏览器是Mozilla Firefox 这和返回有关系么?我的test方法是传入什么,返回什么的啊。 fun2 是test函数执行完成的结果,就是一个匿名函数啊 fun1() , fun2() 都可以调用的到啊~ [/quote] 我看错了 你test里面不是return 传入的参数吗,我说的返回是这个地方。 fun1是函数,父域是全局window域 fun2是test执行后返回的函数 所以fun2的父域是test函数执行后生成的的域,在往上test的父域是全局window域 能想到得区别就这些。[/quote] 就像是闭包一样的么
foolbirdflyfirst 2015-12-31
  • 打赏
  • 举报
回复
引用 2 楼 u013482666 的回复:
[quote=引用 1 楼 foolbirdflyfirst 的回复:] 这是哪家浏览器的控制台。。 一个无返回, 一个返回函数 仅此而已
浏览器是Mozilla Firefox 这和返回有关系么?我的test方法是传入什么,返回什么的啊。 fun2 是test函数执行完成的结果,就是一个匿名函数啊 fun1() , fun2() 都可以调用的到啊~ [/quote] 我看错了 你test里面不是return 传入的参数吗,我说的返回是这个地方。 fun1是函数,父域是全局window域 fun2是test执行后返回的函数 所以fun2的父域是test函数执行后生成的的域,在往上test的父域是全局window域 能想到得区别就这些。
  • 打赏
  • 举报
回复
引用 1 楼 foolbirdflyfirst 的回复:
这是哪家浏览器的控制台。。 一个无返回, 一个返回函数 仅此而已
浏览器是Mozilla Firefox 这和返回有关系么?我的test方法是传入什么,返回什么的啊。 fun2 是test函数执行完成的结果,就是一个匿名函数啊 fun1() , fun2() 都可以调用的到啊~
foolbirdflyfirst 2015-12-31
  • 打赏
  • 举报
回复
这是哪家浏览器的控制台。。 一个无返回, 一个返回函数 仅此而已
foolbirdflyfirst 2015-12-31
  • 打赏
  • 举报
回复
还可以实践为js的callback + 闭包,比如
function calc(func){
  var self = this;
  return function(){
    return func.apply(self,arguments)
  }
}

var add = calc(
   function(a,b){
     return a+b;
   } 
);
var multipy = calc(
   function(a,b){
     return a*b;
   } 
);
alert(add(1,1))
alert(multipy(2,2))
alert(multipy(4,4,4))
alert(multipy(8,8,8,8))

87,914

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧