js 彻底理解回调函数「建议收藏」

一、前奏在谈回调函数之前,先看下下面两段代码:不妨猜测一下代码的结果。functionsay(value){alert(value);}alert(say);alert(say(‘hijs.’));如果你测试了,就会发现:只写变量名say返回的将会是say方法本身,以字符串的形式表现出来。而在变量名后加()如say()返回的就会使say方法调用后的结果,这里

大家好,又见面了,我是你们的朋友全栈君。

一、前奏

在谈回调函数之前,先看下下面两段代码:
不妨猜测一下代码的结果。

function say (value) { alert(value); } alert(say);
alert(say('hi js.'));

如果你测试了,就会发现:

只写变量名  say   返回的将会是 say方法本身,以字符串的形式表现出来。
而在变量名后加()如say()返回的就会使say方法调用后的结果,这里是弹出value的值。

二、js中函数可以作为参数传递

再看下面的两段代码:

function say (value) { 
   
    alert(value);
}
function execute (someFunction, value) { 
   
    someFunction(value);
}
execute(say, 'hi js.');

function execute (someFunction, value) { 
   
    someFunction(value);
}
execute(function(value){ 
   alert(value);}, 'hi js.');

上面第一段代码是将say方法作为参数传递给execute方法
第二段代码则是直接将匿名函数作为参数传递给execute方法

实际上:

function say (value) { 
   
    alert(value);
}
// 注意看下面,直接写say方法的方法名与下面的匿名函数可以认为是一个东西
// 这样再看上面两段代码是不是对函数可以作为参数传递就更加清晰了
say;

function (value) { 
   
    alert(value);
}
这里的say或者匿名函数就被称为回调函数。

三、回调函数易混淆点——传参

如果回调函数需要传参,如何做到,这里介绍两种解决方案。

  • 将回调函数的参数作为与回调函数同等级的参数进行传递

回调函数传参方法1

  • 回调函数的参数在调用回调函数内部创建

回调函数参数在调用回调函数内部创建

四、写在最后

回调函数应用场景多用在使用 js 写组件时,尤其是组件的事件很多都需要回调函数的支持。
关于回调函数还有什么问题可以在下面留言,一起交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125080.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下解压rar压缩文件

    linux下解压rar压缩文件在windows下我们压缩解压文件通常后缀为rar,在linux下我们压缩解压文件通常后缀为tar默认在linux下我们不能解压压缩rar文件我们可以下载rarlinux安装包实现解压压缩后缀为rar的包下载地址:WinRARarchiver,apowerfultooltoprocessRARandZIPfiles安装~]#wgethttps://www.rarlab.com/rar/rarlinux-x64-610.tar.gz~]#tar-zxv.

    2022年7月11日
    14
  • Opengrok本地搭建(Windows10)

    Opengrok本地搭建(Windows10)Opengrok本地搭建(Windows10)下载解压OpenGrok下载解压Tomcat(8.x及以上版本),添加环境变量:TOMCAT_HOME=D:\ProgramFiles\apache-tomcat-10.1.0-M8;运行目录下bin\startup.bat;浏览器输入网址:http://localhost:8080/下载解压Ctags(githubctags),添加环境变量:CTAGS_HOME=D:\ProgramFiles\ctags-p5.9.20

    2022年6月3日
    115
  • SwipeRefreshLayout实现上滑加载更多[通俗易懂]

    SwipeRefreshLayout实现上滑加载更多[通俗易懂]SwipeRefreshLayout实现上滑加载更多在我们的项目中,需要用到许多下拉刷新和上滑加载的操作,不说什么没用的,直接来介绍SwipeRefreshLayout的扩展用法。后面会简单的介绍SwipeRefreshLayout的用法。在这里我们对谷歌官方的控件进行拓展,使得SwipeRefreshLayout具有上滑加载更多的功能。下面是正文首先我们新建文件(文件名自己定义,在…

    2022年6月25日
    24
  • pfx证书获取私钥「建议收藏」

    pfx证书获取私钥「建议收藏」publicclassKeyUtil{publicKeyUtil(){}publicstaticPrivateKeygetPrivateKeyFromPFX(InputStreaminputStream,StringpfxFilePwd)throwsPKIException{PKCS12pkcs12=newP…

    2022年5月12日
    47
  • django mysqlclient_MySQL打不开

    django mysqlclient_MySQL打不开mac系统安装mysqlclient时,会报错OSError:mysql_confignotfound解决办法在项目路径下输入以下内容PATH="$PATH":/usr

    2022年7月28日
    9
  • Django大杂烩

    Django大杂烩一 web 框架本质 socket 接受请求返回 response socket 可以封装 python 标准库就有 关于 python2 与 python3 在 3 中 unicode 是字符串 需编码成字节 bytes b fffff bytes ffff encoding utf8 ffff encode utf8 对于不同的 url 后缀 xxx 需作不同处理 封装成不同的

    2025年6月23日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号