javascript回调函数详解

javascript回调函数详解scripttype text javascript functionadd a b fun letsum a b fun sum functionlog sum document write 我是方法 1 拿到的数字是 sum 方法 1 add 2 3 log 方法 2 内嵌函数方法 add 2 3 function su scripttype text

一、前奏

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.'); 

实际上:

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

四、其他介绍

 <script type="text/javascript"> function add(a, b, fun) { 
    let sum = a + b; fun(sum); } function log(sum) { 
    document.write("我是方法1,拿到的数字是:" + sum+"") } //方法1 add(2, 3, log) //方法2: 内嵌函数方法: add(2, 3, function (sum) { 
    document.write("我是方法2,拿到的数字是:" + sum) }) </script> 

详解

ps. 回调函数与 c 语言中的函数指针类似—指针指针指针!!!重要的事情说三遍

回调函数

 function addSqua(num1, num2, callback){ 
    var sum = num1 + num2; return callback(sum); } function squa(num){ 
    return num*num; } let num = addSqua(1, 2, squa); console.log(num); //=>9  

匿名回调函数

function addSqua(num1, num2, callback){ 
    var sum = num1 + num2; return callback(sum); } let num = addSqua(1, 2, function squa(num){ 
    return num*num; }); console.log(num); //=9  

*上面的function squa(num){}函数,可以写成function (num){}匿名函数

模仿数组中的every方法

 Array.prototype.myEvery = function (callback) { 
    if (typeof callback === 'function') { 
    for (let i = 0; i < this.length; i++) { 
    if (callback(this[i])) { 
    return false; } } return true; } return true; } let op = [3, 6, 'every', 9,'each']; op.myEvery(function (value) { 
    console.log(value); }) // 3 // 6 // 'every' // 9 // 'each' 

回调函数特点

  • 不会立刻执行, 正如定义中给出的一样回调函数作为代码片段可以根据需要在其特定条件下执行, 回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。
  • this,ES6推出了箭头函数, 箭头函数的推出需要在写回调函数的时候格外注意, this 是指向所在函数的上下文对象, 如果在在ES6采用箭头函数则需要注意 this使用, 箭头函数中this并没有上下文关系直说, 有兴趣的可以查看ES6 阮一峰, 再次奉上传送门
    回调函数的优点和使用场景是个闭包

回调函数是闭包的简单使用,也就是说它能访问到其外层定义的变量。

回调函数之美

*知识点收集与网络

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

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

(0)
上一篇 2026年3月18日 下午7:02
下一篇 2026年3月18日 下午7:03


相关推荐

  • 抽象类和接口的关联

    抽象类和接口的关联

    2021年9月29日
    47
  • OpenAI发布通用智能体ChatGPT Agent:实现自主思考、联网与工具调用,智能体赛道大变天!

    OpenAI发布通用智能体ChatGPT Agent:实现自主思考、联网与工具调用,智能体赛道大变天!

    2026年3月16日
    2
  • logo 图标(php图片加文字水印)

    现在很多人都在使用小红书app,但大家肯定都会有同一个问题,图片怎么保存,重点是怎么保存图片无水印。看到好看的图片想保存下来,可是却不喜欢看到有水印。今天,就好好和大家分享一下小红书保存图片途径,往下看不会让你失望。准备工作:电脑一台固乔电商图片助手小红书网站下载步骤:打开电脑下载工具固乔电商图片助手,大家可从浏览器去搜索,也可以直接在乔礼卖家驿站里面去下载这个工具。下载后直接打开就能使用,顺便在…

    2022年4月18日
    33
  • php函数nl2br的反函数br2nl

    php函数nl2br的反函数br2nl

    2021年9月18日
    54
  • 三极管原理与应用

    三极管原理与应用三极管的三种状态也叫三个工作区域 即 截止区 放大区和饱和区 1 截止区 三极管工作在截止状态 当发射结电压 Ube 小于 0 6 0 7V 的导通电压 发射结没有导通集电结处于反向偏置 没有放大作用 2 放大区 三极管的发射极加正向电压 锗管约为 0 3V 硅管约为 0 7V 集电极加反向电压导通后 Ib 控制 Ic Ic 与 Ib 近似于线性关系 在基极加上一个小信号电流 引起集电极大的信

    2026年3月26日
    2
  • 汇编指令集合

    汇编指令集合汇编语言 cs 是代码段寄存器 ds 是数据段寄存器 段代码 CS 存放当前正在运行的程序代码所在段的段基值 表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得 IP 相应的偏移值 CS IP1 callwordptr 内存单元地址这个指令的是先将 call 指令的下一条指令的 IP 入栈 然后跳到以内存单元地址为 IP 的代码处 2 calldwordptr 内存单元地址 call 是汇编指令 用来调用子过程 后面的 Dwordptr 40105c 是一个内存地址 就是要调用的子过

    2026年3月26日
    2

发表回复

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

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