fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[js] 第10天 简要描述下什么是回调函数并写一个例子出来

Open haizhilin2013 opened this issue 5 years ago • 37 comments

第10天 简要描述下什么是回调函数并写一个例子出来

haizhilin2013 avatar Apr 25 '19 21:04 haizhilin2013

通常将一个函数B传入另一个函数A,并且在 需要的时候再调用函数A。 promise 就有回调

tiyunchen avatar Jun 01 '19 08:06 tiyunchen

dom.addEventerlisten('click',function(){
  // do something
})

myprelude avatar Jun 13 '19 08:06 myprelude

(callback) => {
    return (...args) => {
        const self = this;
        setTimeout(() => {
            callback.apply(self, args);
        }, 200);
    };
};

Damon99999 avatar Jun 18 '19 08:06 Damon99999

回调函数就是指函数在初始定义的时候先不执行,等满足一定条件以后再拿出来执行。如下: setTimeout(() => { console.log('在本轮任务最后执行!') }, 0);

AricZhu avatar Jun 19 '19 01:06 AricZhu

asyncFn: () => {
        // 1
        $('body').onclick = e => {
            console.log(e)
        }

        // 2
        document.querySelector('body').addEventListener('click', e => {
            console.log(e)
        })

        // 3
        setTimeout((e) => {
            console.log(e)
        }, 100)

        // 4
        $ajax('/url', res => {})
    }

persist-xyz avatar Jun 29 '19 07:06 persist-xyz

回调函数首先作为一个函数的参数传入,当这个函数执行后再执行的函数,往往会依赖前一个函数执行的结果。 在 javascript 中,对于 I/O、HTTP 请求等异步操作,为了控制执行的顺序就需要使用回调的方法。

// 第三个参数就是回调函数
function func1(param1, param2, ..., callback){
  // To do some action
  // 往往会在最后调用 callback 并且传入操作过的参数
  callback(cbParam1, cbParam2, ...)
}

// 实际调用的时候
func1(param1, param2, ..., (cbParam1, cbParam2, ...) => {
  // To do some action
})

当有过个任务需要顺序执行时,如果采用回调函数的形式就会出现我们熟悉的“回调地狱”的情况。为了解决这个问题,在 ES6 中就有了 Promiseasync/await 方法。 目前看来 async/await 在异步写法上较为优雅。

Konata9 avatar Jul 06 '19 02:07 Konata9

简单的这个算吗 var i = 0; function callBack(I) { if (I < 10) { console.log(i) callBack(i++) } else { console.log("回调成功") } } callBack(i)

15190408121 avatar Jul 13 '19 11:07 15190408121

简单的这个算吗 var i = 0; function callBack(I) { if (I < 10) { console.log(i) callBack(i++) } else { console.log("回调成功") } } callBack(i)

不算 你这是递归

Vi-jay avatar Jul 25 '19 09:07 Vi-jay

回调是把一个函数作为参数传递给另一个函数,当该函数满足某个条件时触发该参数函数。 主要用于异步操作 例如网络请求 防止页面同步代码阻塞导致渲染线程停止

function longTask(callback,timeout) {
  setTimeout(callback,timeout)
}
longTask(()=>{console.log("回调任务被执行了");},2000);
console.log("我是同步代码 不会阻塞我");

Vi-jay avatar Jul 25 '19 09:07 Vi-jay

function a() { console.log('触发了函数a') } function b() { console.log('触发了函数b') } function c(callback1, callback2) { let num = Math.random() * 10 if (num > 6) { callback1() } else { callback2() } } c(a,b)

hc951221 avatar Aug 07 '19 02:08 hc951221

// 比较简单的就是快排算法 function quick(arr) { if(arr.length <= 1) { return arr; //递归出口 } var left = [], right = [], current = arr.splice(0,1); //注意splice后,数组长度少了一个 for(let i = 0; i < arr.length; i++) { if(arr[i] < current) { left.push(arr[i]) //放在左边 } else { right.push(arr[i]) //放在右边 } } return quick(left).concat(current,quick(right)); //递归 }

15190408121 avatar Aug 25 '19 09:08 15190408121

[1,2,3].map(x=>x+1) 按照依赖前置函数,作为参数传入的条件,这个是回调函数吧

xcLtw avatar Sep 02 '19 03:09 xcLtw

不知道这个算不算,以前对请求方法做了一个简化,success和error算是回调函数吧,我的理解就是把函数当做参数放到另一个函数中。。

 GET: function (url, data, success, error) {
    $.ajax({
      type: 'get',
      url: url,
      dataType: "JSON",
      success: function (result) {
        success(result)
      },
      error: function erryFunction(err) {
        error(err);
      }
    });
  },

GET(url,data,function(res){
    //deal success result
},function(err){
    //deal error result
})

Yulingsong avatar Sep 25 '19 08:09 Yulingsong

我对回调函数的理解就是,定义了一个函数,不去调用他,但是这个函数会在特定时间条件下被调用

crazyming9528 avatar Dec 23 '19 02:12 crazyming9528

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 回调方法 是 任何一个 被 以该回调方法为其第一个参数 的 其它方法 调用 的方法。很多时候,回调是一个当某些事件发生时被调用的方法。

Fa-haxiki avatar Jan 09 '20 05:01 Fa-haxiki

回调函数一般用来解决异步请求: 给每一个任务(函数)传入一个或多个回调函数(callback),前一个任务结束后(比如请求接口),不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

/**
 * 普通语法
 * @param scr:图片的url地址
 * @param callback:图片加载成功的回调函数
 * @param fail:图片加载失败的回调函数
 */
function loadImg(scr, callback, fail) {
    var img = document.createElement('img');

    // onload 事件在图片加载完成后立即执行,成功后执行callback函数,相当于一个回调函数。
    img.onload = function () {
        callback(img) // 图片加载成功执行的回调函数,传入img
    };
    // 图片加载失败执行这个函数
    img.onerror = function () {
        fail()  // 图片加载失败执行的回调函数,传入img
    };
    img.src = scr
}

var src = 'https://cdn.segmentfault.com/sponsor/20200202.png';

// 调用函数,传入2个回调函数,第一个是成功的回调,第二个是失败的回调。
loadImg(src, function (img) {
    console.log(img.width)  // 回调函数里打印图片的宽

}, function () {
    console.log('failed') // 这个是失败的回调函数
});

lizhesystem avatar Mar 17 '20 01:03 lizhesystem

回调函数

任何一个函数都可以是回调函数,他单纯的就是一个函数

高阶函数

有很多说法都是,把函数作为参数传入另一个函数就是回调函数,其实这是错误的,这个应该叫做高阶函数

因为平时见到的大部分回调函数的应用,都是通过高阶函数来完成的

回调函数的应用

jQuery中,回调函数被广泛应用,比如:

$("#btn_1").click(function() {
  alert("Btn 1 Clicked");
});

理解

简单理解,就是满足某个条件的时候去调用一个函数,这个被调用的就是回调函数

rennzhang avatar Mar 20 '20 11:03 rennzhang

回调函数是作为其他函数的参数的函数

function loggle(msg, cb) {
    setTimeout(function () {
      // cb 是 print 回调函数的引用
      cb(msg);
    }, 1000)
  }

 // 我就是回调函数
  function print (msg) {
    console.log(msg); // Hello
  }

  // 一秒后打印 message
  loggle('Hello', print);

qiqingfu avatar Apr 04 '20 08:04 qiqingfu

function doso(callback){ alert(1) callback() } doso(function(){alert(2)})

artoriaforDY avatar Apr 22 '20 09:04 artoriaforDY

回调函数是,一个函数作为另一个函数的参数,当某个特定的条件发生,作为参数的函数就被执行。 比如向服务器发送一个请求,服务器返回一个code,前端根据这个code来反应是否成功响应

function a(b){
    setTimeout(b, 1000)
}
function b(){
    console.log(1)
}
a(b)

blueRoach avatar May 26 '20 08:05 blueRoach

回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。 简单的例子:

    function a(callback) {
        callback(1,2)
    }
    a(function (a,b) { // 匿名回调函数
        console.log(a*b) // 2
    })

giggleCYT avatar Jun 03 '20 07:06 giggleCYT

回调函数: 当一个操作是异步的时候,此时为了获取异步的返回值,通常使用回调函数来接收值

  1. dom的事件监听
  2. 定时器
  3. 异步操作

这里说下异步操作:

function asyncFn (fn) { setTimeout(() => { let val = 5 fn(val) }, 1000); }

asyncFn(val => { console.log(val); })

时隔一秒后打印5

Alex-Li2018 avatar Jul 28 '20 09:07 Alex-Li2018

第10天 简要描述下什么是回调函数并写一个例子出来

回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。 回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

function(callback,url) { let xhr = new XMLHttpRequest(); ... .... xhr.onreadystatechange = callback();

    xhr.send();

}

laboonly avatar Aug 20 '20 14:08 laboonly

回调是把一个函数作为参数传递给另一个函数,当该函数满足某个条件时触发该参数函数。 主要用于异步操作 例如网络请求 防止页面同步代码阻塞导致渲染线程停止

function longTask(callback,timeout) { setTimeout(callback,timeout) } longTask(()=>{console.log("回调任务被执行了");},2000); console.log("我是同步代码 不会阻塞我");

MrZ2019 avatar Sep 04 '20 01:09 MrZ2019

回调函数,不马上执行,而是等到一些方法操作成功后才会执行。 document.addEventListener('click',clickEvent,false); $.ajax({ url:'', type:'', data:'', success:function(res){ console.log(res); } })

lxt-ing avatar Apr 16 '21 01:04 lxt-ing

作为参数传递的函数, new Promise((resolve,reject)=>{ try{ // do sth resolve() } catch(err=>console.log(err)) })

378406712 avatar Apr 26 '21 02:04 378406712

简单的说,就是一个函数在另一个函数内部杯调用

    function fn() {
        console.log('function name is fn');
    }


    function m1(f) {
        f();
    }

    m1(fn);  //function name is fn

Injured-Double avatar Aug 15 '21 10:08 Injured-Double

function callback(){ console.log('你调用我了') } function test(str,callback){ console.log(str); callback(); }

test('我怎么知道',callback);

zxcdsaqwe123 avatar Sep 30 '21 16:09 zxcdsaqwe123

含义

function print(callback) {  
    callback();
}

在上述代码中,print() 函数将另一个函数作为参数,并在函数体内调用它,这叫做回调

被传递给另一个函数作为参数并且最终被调用的函数叫做回调函数

作用

回调函数能帮助我们编写异步代码(I/O、HTTP 请求等),它能确保函数在某个任务完成之前不运行,在任务完成后立即运行

实现

// 在控制台打印一条消息(message),它在 3 秒之后显示
const message = function() {  
    console.log("This message is shown after 3 seconds");
}
 
setTimeout(message, 3000);

// ES6
setTimeout(() => { 
    console.log("This message is shown after 3 seconds");
}, 3000);

message 函数是在发生某事之后(在本示例中为 3 秒之后),而不是在此之前被调用。因此,message 函数就是一个回调函数

amikly avatar Oct 28 '21 16:10 amikly

一个函数被作为参数传递给另一个函数,并在其中被调用。特点是:自己定义的函数;你没有调用;最终它执行了。 常见的回调函数: // DOM事件回调 document.getElementById('btn').onclick = function (){ alert('btn') } // 定时器回调函数 let intervalId = null intervalId = setInterval(function (){ alert('到点了') }, 2000)

tk12138 avatar Nov 16 '21 12:11 tk12138