但是回调函数作为js的一大特性,用好了会感觉非常好。
回调函数就是高阶函数,所谓高阶函数就是:
1方法接收的参数可以是function;
2方法也可以返回function;
例如
//1声明一个test函数
function test(param){
alert(param);
}
//2声明一个exec函数
function exec(callback){
callback("123456")//callback其实就是test,这里执行相当于执行test("123456")
}
//3调用exec,并把test当做参数。
exec(test);
//----------------------------------
了解了这个回调函数之后,那么现在讨论一个现实的需求。
大家都只window.confirm()是一个确定取消的弹出框。当点击缺点的时候,请求到数据库。当取消的时候,隐藏弹出框。
如果需要自己写一个confirm怎么办?
那么我们一起思考一下。顺序是这样的:
首先我们有一个createDialog 类,类里创建一个dialog,里面创建两个按钮“确定”,“取消”。
var createDialog = function(){
var dialog = new Dialog();
var confirm = new ConfirmButton();
var cancel = new CancelButton();
confirm .click(function(){
$.ajax({
url:"xx"
})
});
cancel .click(function(){
dialog.hide();
});
}
然后设想下我们调用这个createDialog :
createDialog();//创建出dialog了
弹出框,里面有确定和取消俩按钮。当我点击保存的时候,就调用了上面confirm .click();方法。
这样就顺理成章了,可是有问题来了。你这个confirm .click();里面的内容写死了耶。请看:
confirm .click(function(){
//以下的操作被写死。
$.ajax({
url:"user/save",//
})
});
比如我现在需要保存一个user,但是换成保存一个角色,我的url会变的好不好?
而且点击确定的时候,我做什么操作是未知的,不一定非是ajax请求,也可以是一个页面跳转的代码好吗?
而且也不一定就是get请求,可以是post请求,你怎么能给我写死呢?
好的不卖关子了,那么我现在要用我们的回调函数来解决这个问题
var createDialog = function(callback){
var dialog = new Dialog();
var confirm = new ConfirmButton();
var cancel = new CancelButton();
confirm .click(function(){
callback(true);//执行callback 传递参数true
});
cancel .click(function(){
callback(false);//执行callback传递参数fasle
dialog.hide();
});
}
//调用createDialog方法,并且传递一个匿名函数,匿名函数的result的参数就是上面confirm .click();方法里面的true或false。
createDialog(function(result){
alert(result); //output: true or false
//当点击确定的时候我们再执行ajax。这样我们就能解决上面的问题啦。
if(result==true){
$.ajax({
url:"xx"
})
}
});
或者可以这样写直观点
var callback = function(result){
if(result==true){
$.ajax({
url:"xx"
});
}
}
createDialog(callback);//将callback当做参数传值
第一次写博客,而且是伪代码,也没有过多检查,如果书写有误,请多包涵。大家共同进步。接下来会经常写一点技术的总结的东西,大多都是js的。
希望多多支持