`

callback函数由谁负责定义

 
阅读更多

这段时间从java切换到js,最一头雾水的就是callback,今天稍微有点感觉,总结一下

以前在java里,方法就是由所在的类定义的,非常明确,比如:

public String transfer(String name){
    return "hello" + name;
}

这个方法的定义就集中在所在的类里,如果使用一个第三方的框架或类库,也只要看一下API文档或者源码就行了

但是js里的callback函数,感觉是在2个地方分别定义的,比如:

function acceptCallback(callback){
    // 一些逻辑
    callback(123, "helloworld", enterpriseId);
}

上面是函数接受另一个函数作为参数,并负责传参并调用它

acceptCallback(function(num, str, enterpriseId){
    // 处理num
    // 处理string
    // 处理enterpriseId
});

上面这段代码实际调用acceptCallback函数,并传了一个回调函数给accpetCallback作为参数,回调函数体是在这里定义的,另一个函数:

acceptCallback(function(num, str, enterpriseId){
    num++;
    console.log(str);
    mongo.remove(enterpriseId);
})

上面的代码也调用了acceptCallback函数,但是传了另一个回调函数给它,对3个参数的处理完全不同

结论

回调函数的签名是由接受它的函数定义的,因为它负责调用回调函数,只有它才知道会传什么参数。但是,回调函数的body是在客户端代码定义的,回调函数的具体逻辑,可以完全不同

因此,回调函数的API也是由第三方组件提供的,客户端代码需要查看API文档,才能知道回调函数的定义,但是可以根据自己的需求,在函数体里写逻辑

例子

比如使用node-mongodb-native:

collection.remove({"enterpriseId":enterpriseId},function(err,deleteNum){
                // how to handle error, and do something with deleteNum
            });

上面的remove()方法,就是mongodb-native的API,其中规定了回调函数的签名,第一个参数是error,第二个参数是删除的记录数。但是具体在回调函数里写什么逻辑,则是由客户端代码确定的

remove()方法内部类似:

function remove(query, callback){
    // 执行remove操作
    if(success){
        callback(null, removeNum);// no error
    }else{
        callback(err);
    }
}

怎么知道javascript的API如何调用

综上所述,java的API看一下方法定义就知道了:

public String getName(String name){}

参数类型,返回值,都一目了然。对比javascript的函数定义:

function remove(query, callback){
}

不直观的原因,主要就是一眼看到这个函数定义,完全不知道callback是什么(要接受什么参数),所以调用的时候也就不知道要怎么写

remove(query, function(){
    // 这里面要写什么?
});

所以,只能查看API文档,或者读remove函数的源码

分享到:
评论

相关推荐

    JavaScript回调函数callback用法解析

    JavaScript回调函数的使用是很常见的,引用官方回调函数的定义: A callback is a function that is passed as an argument to another function and is executed after its parent function has completed. 解释...

    设计模式Callback介绍与实例

    回调函数(callback Function),顾名思义,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调...

    JS回调函数 callback的理解与使用案例分析

    本文实例讲述了JS回调函数 callback的理解与使用。分享给大家供大家参考,具体如下: 基本理解一个概念 回调函数回头再调用函数,等主干事情干完了,再回头干分支上的事情。 官方定义 A callback is a function ...

    浅谈jquery回调函数callback的使用

    callback函数在当前动画100%完成之后执行 代码如下: $(“p”).hide(1000); alert(“the paragraph is now hidden”); <!–未使用回调函数,段落未完全隐藏时就弹出信息–> $(“p”).hide(1000,function()...

    JS回调函数基本定义与用法实例分析

    我们先来看看回调的英文定义:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed。 字面上的理解,回调函数就是一个参数,将...

    javascript延时执行跳转或执行函数

    延时执行跳转或执行函数 url可以为地址或者定义好的javascript/jquery函数, 定义每次延时时间和延时次数, callback是每次延时可以执行的回调函数

    javascript 回调函数详解

    回调函数定义 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接...

    钩子函数大全WORD版

    函数原形:LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam ); 参数: Code: 指示挂钩处理过程是否必须处理此消息.若nCode的值是HC_ACTION,则挂钩处理过程必须处理此消息,若nCode之值小于0,此...

    Delphi中制作DLL中回调函数的应用

    你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数, 而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都 有回调函数的概念,它实际上是...

    浅析JavaScript回调函数应用

    一、回调函数定义 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方...

    iTunesMobileDevice.dll开发文档API文档

    回调函数,当设备状态改变时由iTunesMobileDevice.dll回调 参数: am_device_notification_callback_info 返回设备信息 am_restore_device_notification_callback 定义: typedef void (*am_restore_device_...

    redux-saga-callback:redux-saga辅助函数等待调度的动作

    在redux-saga应用程序的正常流程中,可能会希望在某些情况下要在由分派操作触发的传奇完成后得到通知。 该库的目的是提供一些帮助程序功能以实现该功能。 安装 npm i redux-saga-callback 用法 import { putWait , ...

    VBA.Callback:Microsoft Access中的回调函数

    VBA回调 Microsoft Access VBA中的回调函数 版本1.2.0 (c)Gustav Brock,仙人掌数据ApS,CPH Microsoft Access鲜为人知的功能 回调函数是Microsoft Access中的隐藏元素。... 您还可以使用用户定义的函数设置Ro

    PHP闭包函数详解

    闭包函数没有函数名称,直接在function()传入变量即可 使用时将定义的变量当作函数来处理 $cl = function($name){ return sprintf('hello %s',name); } echo $cli('fuck')` 直接通过定义为匿名函数的变量名称...

    javascript some()函数用法详解

    thisObject : 在执行回调函数时定义的this对象。 功能说明 对数组中的每个元素都执行一次指定的函数(callback),直到此函数返回 true,如果发现这个元素,some 将返回 true,如果回调函数对每个元素执行后都返回 ...

    JS回调函数原理与用法详解【附PHP回调函数】

    本文实例讲述了JS回调函数原理与用法。分享给大家供大家参考,具体如下: JS回调函数 何为回调函数,官方解释:...说白了,回调就是回溯,先定义好将要使用的函数体,然后在使用使再调用这个函数,我们通常把callback作

    PHP匿名函数(闭包函数)详解

    经常用作回调函数(callback)的参数。 当然,也有其他应用的情况。 注:php闭包是PHP5.3版本之后才有的 什么是闭包?闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局...

    钩子函数的使用,有例子

    说明:钩子进程是一些依附在一个钩子上的一些函数,因此钩子进程只被WINDOWS调用而不被应用程序调用,他们有时就需要作为一个回调函数(CALLBACK)。 参数说明: nCode:钩子代码,钩子进程使用钩子代码去决定是否...

    C#委托所蕴含的函数指针概念详细解析

    2、回调函数callback使用的技术就是函数指针: 回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事: 1). 声明; 2). 定义; 3). 设置触发条件,就是在你的函数中把你的...

    Callback:允许您以更动态的方式执行回调

    PHPFluent\回调 允许您以更动态的方式执行回调。安装该软件包可在上。 您可以使用安装它。 composer require phpfluent/callback依赖关系PHP 5.4+... 用户定义函数 $ callback = new Callback ( 'my_function' ); PHP

Global site tag (gtag.js) - Google Analytics