代码之家  ›  专栏  ›  技术社区  ›  leeand00

闭包与回调有何不同?

  •  20
  • leeand00  · 技术社区  · 16 年前

    我问 a question about callbacks 闭包与回调有何不同?

    9 回复  |  直到 8 年前
        1
  •  20
  •   eglasius    16 年前

    http://jibbering.com/faq/faq_notes/closures.html . 它可以帮助您更好地理解闭包与函数的关系。

    http://www.javascriptkit.com/javatutors/closures2.shtml

    基本上,回调就像一个函数指针。使其成为闭包的位是当该函数访问其所在上下文中的任何内容时,比如它外部的变量。发生这种情况时,函数将使用变量的当前值(而不是复制它们)。参见示例4。

        2
  •  11
  •   gimel    16 年前

    不同的定义:

    Callback -

    Closure

    闭包是在包含一个或多个绑定变量的环境中计算的函数。调用时,函数可以访问这些变量。

        3
  •  11
  •   Greg Herbowicz    8 年前

        4
  •  5
  •   Dan Lew    16 年前

    here :

    “闭包”是一个表达式 自由变量和 绑定这些变量的环境 (即“关闭”表达式)。

    实际上,这意味着它是一个有一些隐藏变量的函数。

    回调是一个更高层次的概念。通常,它是一个传递函数,目的是在以后被调用。在JavaScript中,闭包通常用作回调。

        5
  •  1
  •   dirkgently    16 年前

    依赖于上下文变量aka bound variables(=对象状态)的回调将是一个闭包。否则,当它只接受自由变量(=参数)时,它将是一个纯函数。

        6
  •  1
  •   Code Realistic    7 年前

    以下是区分这两者的一种方法:

    关闭

    闭包用于扩展功能,例如,如果用户单击一个按钮,我们希望屏幕上发生一些事情,在这种情况下,我们将使用闭包传递用户事件(单击),然后将数据推送到视图。

    回调或多或少类似于闭包,但它更多地用于通知和提供同步功能。例如,如果执行jQueryAjax调用,您将有如下回调 success() , error() beforeSend() 等等来处理异步数据。

        7
  •  0
  •   Avinash Maurya    6 年前

    什么是回调函数?

    回调函数是一个函数,它是:

    • 作为参数传递给另一个函数
    • 在某种事件之后被调用
    • 父函数完成后,将调用作为参数传递的函数

    回调是由另一个函数调用的任何函数,它将第一个函数作为参数或作为参数传递的函数

    • 注: 调用 :调用函数时执行函数内的代码。 或者我们这样说 通常使用术语“调用函数”而不是“调用函数”。

    通常也会说“调用函数”、“启动函数”或“执行函数”。

     function getUserInput(firstName, lastName, age, callback2,callback1) {
        var fullName = firstName + " " + lastName;
    
        // Make sure the callback is a function
        if (typeof callback2 === "function") {
        // Execute the callback function and pass the parameters to it
        callback2(fullName, age);
        }
    	
        if (typeof callback1 === "function") {     
        callback1(lastName);
        }
    }
    
    function callbackforlastname1(lname){
     console.log("---");
    }
     
    function genericPoemMaker(name, aged) {
        console.log(name + " is finer than fine wine.");
         console.log("A " + aged + " of unfortunl smile");
    }
    
    getUserInput("Avinash", "Maurya", "26", genericPoemMaker,callbackforlastname1); 
    ऐसे कॉल करते है
        8
  •  0
  •   Avinash Maurya    6 年前

    关闭:

    • 或者一个函数返回到另一个函数,我们可以称之为闭包

    注:通俗易懂: 若在另一个函数中作为参数传递的函数是回调函数,或者若在另一个函数中定义为闭包,则有一点不同

    var length = 101;
    function fn2() {
    	console.log("fffxxx: "+this.length);
    }
     
    var obj = {
      length: 5,
      method3: function(fn) {
        fn();
        arguments[0]();
      }
    };
     
    obj.method3(fn2, 1);
       
    **产出
    fffxxx:101
    fffxxx:2**
    
        9
  •  -1
  •   John Leidegren    16 年前

    我看不出这两者有什么联系?闭包将局部状态的一部分带入某种函数,可以将其视为通过引用传递。

    回调旨在通知您某些更改,并重定向程序流。闭包可以修改本地状态,但您永远不会得到处理器时间来处理它,就像回调一样。