js回调函数

js的回调函数是非常之重要的,这是异步编程的一大特点,可能有的程序员不是很喜欢,比如java程序员觉得头很大。
但是回调函数作为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的。

希望多多支持



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值