我是否准确了解回调函数?

时间:2015-08-01 08:13:05

标签: javascript

我在很长一段时间内一直是Javascript修补工具,最近我一直试图对我编写的代码有一个很好的理解。我想要真正擅长编写Javascript。令我困惑的一件事是使用回调函数。到目前为止,我一直避免使用回调。现在,我想知道我对基本回调如何工作的理解是否准确,以及我对参数和参数的理解是否准确,最后,在这种情况下使用回调的目的是什么。使用我在下面创建的回调函数有什么好处?如果没有,什么时候回调功能最有利? 我意识到我在下面写的内容非常冗长,因此对于TLDR人员来说:我是否正确思考这就好像我在“myFunction”中创建了函数“theCallback”?如果是这样,下面的场景有什么好处?为什么不直接调用函数?为什么被调用的函数必须是“myFunction”函数中的参数?
如果下面的场景没有必要使用回调,那么什么时候有必要,有什么好处?感谢。

以下是我看到以下代码的方法:我创建了一个带有两个参数“x”和“callback”的工厂函数“myFunction”,参数是几乎在调用函数时将与参数一起存储的变量。我还创建了另一个带有两个参数“x”和“theValue”的工厂函数“theCallback”。现在因为这些是工厂函数,不管它们是在函数调用“myFunction”下面,它们都会在函数调用之上被提升,所以没有问题。如果我用变量创建了一个函数表达式,它们就不会被提升。所以现在我对“myFunction”的调用有两个参数,其中的参数将被定义为“3”和“theCallback”。 “theCallback”参数是一个函数。该函数有两个参数“x”和“theValue”。当调用“myFunction”时,“x”与参数“3”一起存储,“callback”与函数“theCallback”一起存储,然后执行“myFunction”中的代码,这只是声明的变量并赋值包含文本“for callback”和回调变量(我正在查看为变量)的字符串,这是一个参数,现在是一个参数,我创建的“theCallback”函数也包含参数本身,是调用,并为其执行代码提供参数。在这种情况下,它将执行的代码调用内置的alert函数(或window对象的方法?)并给alert函数一个字符串参数,然后是 使用“x”参数再次调用alert函数,该参数以“3”存储,然后再次调用alert并给出“theValue”参数,其中包含字符串“for callback”。现在当“theCallback”函数作为第二个参数传递给“myFunction”并且它存储在“callback”中时,就好像我在“myFunction”中创建了函数“theCallback”吧?如果是这样,下面的场景有什么好处?为什么不调用一个函数,为什么被调用的函数必须是“myFunction”函数中的参数? 如果下面的场景不需要使用回调,那么何时需要以及有什么好处?

myFunction(3, theCallback);

function myFunction(x, callback){
  var value = 'for the callback';    
  callback(x, value);    
}

function theCallback(x, theValue){
  alert('this is the callback function');
  alert(x);
  alert(theValue);  
}

1 个答案:

答案 0 :(得分:0)

  

使用我在下面创建的回调函数有什么好处?

这有点主观。那里不需要使用回调。通常,您将从一个函数返回数据并将其传递给另一个函数。

  

什么时候回调功能最有利?

当您需要在事件触发后处理数据时,而不是立即处理。例如单击按钮或触发HTTP响应时。

myButton.addEventListener("click", myCallbackFunction);
  

我创建了一个工厂功能" myFunction"

没有。这只是一个功能。 Factory functions创建类对象。

  

他们将被悬挂

函数声明(与函数表达式相对)被悬挂。但这与回调无关。回调基本上是作为参数传递的函数,它与创建它的方式无关。

  

有什么好处

好处是,当事件根据情况发生时,您可以发生不同的事情。

点击上面的点击事件示例。通常,您希望点击不同的内容以产生不同的效果,而不是浏览器供应商addEventListener硬编码的一件事。