【问题标题】:Are call back functions same as nested functions?回调函数和嵌套函数一样吗?
【发布时间】:2012-05-27 18:48:00
【问题描述】:

我一直在用不同的语言进行编程。最近有机会认识jQuery。我正在阅读有关回调函数的内容,我理解它的含义(以一种特定的方式做事,一个接一个。)我有点困惑是否将它们与嵌套函数联系起来?不是一样的吗?请帮助清除概念。谢谢。

【问题讨论】:

    标签: jquery jquery-ui callback jquery-callback nested-function


    【解决方案1】:

    回调函数是在操作完成时调用的任何函数。它在哪里定义并不重要:您可以创建一个局部范围的函数、一个全局范围的函数等。

    $.ajax 为例,其中success 是回调:

    function handleSuccess(data) {
       $(document.body).append(data);
    }
    
    function doAjaxCall() {
       $.ajax({url: 'some/path', success: handleSuccess });
    }
    

    在功能上等同于:

    function doAjaxCall() {
       var handleSuccess = function(data) {
           $(document.body).append(data);
       }
    
       $.ajax({ url: 'some/path', success: handleSuccess });
    }
    

    在功能上等同于:

    function doAjaxCall() { 
       $.ajax({ url: 'some/path', success: function(data) {
           $(document.body).append(data);
        }
       });
    }
    

    【讨论】:

      【解决方案2】:

      如果我错了,请纠正我,但我认为问题是:

      $("#someDiv").fadeIn(200, function(){
              //do some stuff 
          });
      
      vs
      
      $("#someDiv").fadeIn(200, callbackFunction);
      function callbackFunction()
      {
          //do some stuff
      }
      

      (很抱歉将此作为答案而不是评论发布,但 cmets 没有代码格式)

      【讨论】:

      • 实际上,cmets 确实有code formatting(在反引号之间):)
      • 嗯...不是真的:$("#someDiv").fadeIn(200, function(){ //do some stuff }); vs $("#someDiv").fadeIn(200, callbackFunction); function callbackFunction() { //do some stuff }
      【解决方案3】:

      回调函数只是一个执行回调的函数。 :) 所以首先你需要调用,这实际上是任何操作。考虑这个例子:

      $.ajax({
          url: '/test/'
      });
      

      这个方法调用我们的服务器。现在操作是异步的——我们不知道服务器什么时候响应。但我们确实知道它将给我们什么样的数据。所以你定义了回调——服务器响应后你要执行的操作。在这种情况下,您可以定义success 回调:

      $.ajax({
          url: '/test/',
          success: function(res) {
              console.log(res);
          }
      });
      

      回调不必是异步的。考虑这个例子

      function test(data, callback) {
          if (callback && $.isFunction(callback))
              callback(data);
      }
      

      jQuery 方法isFunction 只检查callback 是否是一个函数。现在你可以像这样拨打test

      test('test_string', function(str) {
         console.log(str);
      });
      

      作为第二个参数传递的函数是一个回调。

      所以基本上回调只是一个函数作为参数传递给另一个函数。主要用于异步操作,但不仅限于(生活示例:Array 对象的方法forEach)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-22
        • 2011-07-20
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多