带参数的回调函数

本人cocos-js新手,不确定下面的问题是否属于回调函数,姑且写了以上标题。如有错误,请指教
var mainscene = ccs.load(res.MainScene_json);
this.addChild(mainscene.node);
var bt = ccui.helper.seekWidgetByName(mainscene.node, “Button1”);//从mainscene中获取名为Button1的组件
bt.setPosition(100, 400);
bt.addTouchEventListener(this.buttonTouchEvent,this);

buttonTouchEvent:function(sender,type){
//根据触发事件的类型进行分情况处理,从控制台输出cc.log();
switch (type) {
case ccui.Widget.TOUCH_BEGAN:
cc.log(“loginButton Touch Began”);
break;
case ccui.Widget.TOUCH_MOVED:
cc.log(“loginButton Touch Moved”);
break;
case ccui.Widget.TOUCH_ENDED:
cc.log(“loginButton Touch Ended”);
break;
case ccui.Widget.TOUCH_CANCELED:
cc.log(“loginButton Touch Canceled”);
break;
default:
break;
}
上面这段代码是从网上找到的,可以正确运行,实现了点击按钮调用buttonTouchEvent方法。根据下面buttonTouchEvent方法的定义,发现它带两个形参sender和type。那么问题来了,sender和type的实参是在什么地方被传进来的呢?我并没有给这个函数传参数啊,为什么它能正常运行

回调函数,就是别人调用的,然后别人调用的时候传的参数。。。简单易懂吧

楼上的应该没理解楼主的问题。

我也正好有这些疑问呢。
第一:我们定义这个回调函数的时候,我怎么知道需要定义两个行参sender和type
第二:别人调用的时候,传递参数,在哪里传的呢?

— Begin quote from ____

引用第2楼云华于2015-05-12 14:02发表的 :
楼上的应该没理解楼主的问题。

我也正好有这些疑问呢。
第一:我们定义这个回调函数的时候,我怎么知道需要定义两个行参sender和type
第二:别人调用的时候,传递参数,在哪里传的呢?
http://www.cocoachina.com/bbs/job.php?action=topost&tid=300104&pid=1305470

— End quote

2楼的同学懂我:14:

这是一种设计模式思想啊
a = {};
a.addListener = function(func){
this.func = func;
}
a.exec = function(a,b){
if(this.func){
this.func(a,b);
}
}

function b(a,b){
print(a,b);
}
a.addListener(b);
a.exec(“111”,“222”); 这样参数就传进去了

我是不是可以这样理解:
a.addListener (func)
相当于上面的
bt.addTouchEventListener(this.buttonTouchEvent,this);
func()相当于this.buttonTouchEvent()
而this.buttonTouchEvent()之所以没有显式地传入参数,是因为他被另一个类似a.exec()这样的函数调用了,在被调用的过程中获得了对应的参数
如果是这样,还是有问题:buttonTouchEvent()是我自定义的一个函数,我只在bt.addTouchEventListener(this.buttonTouchEvent,this);这个语句中调用了buttonTouchEvent(),并没有在其他地方调用buttonTouchEvent(),所以应该不存在类似a.exec()这样的函数才对
还是说我理解错了?

我明白了,func()对应的不是this.buttonTouchEvent(),而是addTouchEventListener(sender,type);中的sender,而sender在别处被调用了

addTouchEventListener的参数好像不是sender和type,那是buttonTouchEvent()的参数:9:…总之func()对应的是addTouchEventListener的形参而不是实参buttonTouchEvent(),我在回去看看addTouchEventListener的定义