这是JavaScript/jQuery回调的正确方式吗

Is this a correct way of JavaScript/jQuery callback?

本文关键字:方式吗 回调 JavaScript jQuery 这是      更新时间:2023-09-26

这是一个简单的问题。这是我的代码:

$(document).ready( function () {
    func1( "foo", callback);
    function callback(param){
        alert(param+" is my name");
    }
    function func1(name, cb) {
        cb(name);        // alerts "foo is my name"
        callback("bar"); // alerts "bar is my name"
    }
});

我想知道:

  • func1内部的哪个函数调用是正确的callback,为什么
  • 或者它们都是正确的
  • callback("bar");不是一个正常的函数调用吗

回调旨在让调用者指定函数在执行过程中的某个定义点应该做什么。被调用的函数不应该提前知道回调函数的名称。因此,它们通常会作为参数传递给函数,而应该调用回调的函数应该只调用该参数。

当您在func1中调用callback("bar")时,您完全错过了回调的要点。您可能正在调用碰巧用作回调的函数,但回调的意义在于func1不应该知道这一点。它只需要调用作为参数传入的函数(cb)。当我调用func1时,我应该能够传递一个完全不同的回调函数,而func1应该只调用该函数,而不知道它的名称(它甚至可能没有!)。

"正确"的方式是cb(name)

callback("bar");直接调用回调函数,当cb(name);调用传递给func1的引用时,

cb(name);似乎是正确的方式。

第一个。函数调用另一个已作为参数pased的函数。

似乎大多数jquery方法都遵循以下形式进行回调:

 $(SUBJECT).method(function() {
     //do stuff
 }, /*callback here*/ function(){
    //do stuff
 });

比如

$(foo).click(function() {
      $(bar).fadeIn(300, function(){
         //call back here
      });
 });

小提琴