美文网首页ES6 之 个人解析
函数解析 之 回调函数

函数解析 之 回调函数

作者: 爱尔兰的男孩 | 来源:发表于2018-02-06 15:46 被阅读63次

1. 什么叫做回调函数?

详情请查看 阮一峰 之ES6 解析 链接:https://pan.baidu.com/s/1deSccY 密码:fohv

答 :直白的说:就是 函数 中嵌套另一个 函数 形成复杂的语法结构。在javascript 中,
函数也是一种变量可以成为其他函数的参数。这里要注意 this 的指向。

官方定义:回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。

2. 回调函数特点

2.1  不会立刻执行, 正如定义中给出的一样回调函数作为代码片段可以根据需要在其特定条件下执行, 回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。

2.2  this,ES6推出了箭头函数, 箭头函数的推出需要在写回调函数的时候格外注意, this 是指向所在函数的上下文对象, 如果在在ES6采用箭头函数则需要注意 this使用, 箭头函数中this并没有上下文关系直说, 有兴趣的可以查看ES6 阮一峰。

3.  回调函数的好处

3.1 DRY,避免重复代码。

3.2 可以将通用的逻辑抽象。

3.3 业务逻辑分离 (it's so beautiful ^-^ ^-^)

3.4 提高代码可维护性和可读性。

3.5 分离专职的函数。

js回调函数的伟大之处是其他传统语言所没有的, 它可以实现业务逻辑分离, 相当于暴露给外界一个接口, 这一点像极了前后端分离架构中的 API 接口设计理念

4.  回调函数的缺点

4.1 回调函数层级太多,使用困难。

4.2 大量的回调函数运行, 消耗内存,影响性能。

4.3 直白的来说,就是中看,不实用,能不用,就不用。

5.  实例解析

1.0  //定义主函数,回调函数作为参数function A(callback) {

    callback(); 

    console.log('我是主函数');     

}//定义回调函数function B(){

    setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作  }//调用主函数,将函数B传进去A(B);//输出结果我是主函数

我是回调函数


2.0 //函数嵌套

functionaddSqua(num1, num2, callback){

  varsum = num1 + num2;

  returncallback(sum);

}

functionsqua(num){

  returnnum*num;

}

let num = addSqua(1, 2, squa);   

console.log(num);

//=>9

6.箭头函数

箭头函数ES6最常用的一个新特性了,用它来写function比原来的写法要简洁清晰很多,下面的来源与 阮一峰讲解的 es6。 链接 :百度云盘ES6资料  密码:nd2h  第70页。

1.0

function (i) { return  i +1; }

//ES5的写法

(i) => i +1

//ES6的写法


2.0

const pipeline = (...funcs) =>

val => funcs.reduce((a, b) => b(a), val);

const plus1 = a => a + 1;

const mult2 = a => a * 2;

const addThenMult = pipeline(plus1, mult2);

addThenMult(5)

// 12


3.0

// ES6

function foo() {

setTimeout(() => {

  console.log('id:', this.id);

            }, 100);

 }

// ES5

function foo() {

var _this = this;

setTimeout(function () {

console.log('id:', _this.id);

}, 100);

}


4.0能力提升

请问下面的代码之中有几个this?

function foo() {

return () => {

return () => {

return () => {

console.log('id:', this.id);

};

};

};

}

var f = foo.call({id: 1});

var t1 = f.call({id: 2})()(); // id: 1

var t2 = f().call({id: 3})(); // id: 1

var t3 = f()().call({id: 4}); // id: 1

上面代码之中,只有一个this,就是函数foo的this,所以t1、t2、t3都输出同样的结果。因为所有的内层函数都是箭头函数,都没有自己的this,

它们的this其实都是最外层foo函数的this。

注意: 由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。

详情请查看 阮一峰 之ES6 解析 链接:https://pan.baidu.com/s/1deSccY 密码:fohv

相关文章

  • 函数解析 之 回调函数

    1.什么叫做回调函数? 详情请查看阮一峰之ES6解析 链接:https://pan.baidu.com/s/1de...

  • JavaScript系列之回调函数callback

    JavaScript系列之回调函数callback JavaScript回调函数的使用是很常见的,引用官方回调函数...

  • JavaScript函数_08回调函数

    回调函数 回调函数(回调),当我们把某个函数作为参数传递给另一个函数的时候,这个函数就是回调函数 回调函数的基本写...

  • 回调函数解析

    一个普通的带函数的参数: 回调函数 回调包含同步回调和异步回调。只不过异步回调用的多一些而已。 回来讲为什么js是...

  • 函数指针之回调函数和转移表

    函数指针之回调函数和转移表 《C和指针》261页函数指针的用途: 对不同的数据类型作相同的操作->回调函数 对相同...

  • ES6——举个例子理解Promise的原理和使用

    1. Promise 之前 1.1 回调函数 回调函数:把函数A当作参数传递给另一个函数B调用,那么A就是回调函数...

  • Kotlin系列之let、with、run、apply、also

    目录: 一、回调函数的Kotin的lambda的简化二、内联扩展函数之let三、内联函数之with四、内联扩展函数...

  • mqtt python包回调分析

    mqtt的python包,回调函数比较复杂,每次在连接之前,需要先实现回调函数,回调函数的传入参数固定 将回调函数...

  • 异步的实现

    异步的三种实现方式: 回调函数事件Promise 回调函数 回调函数不一定是异步 但是异步一定是回调函数。 事件 ...

  • Promise

    回调 把一个函数A传给另一个函数B调用,那么A就是回调函数。 回调地狱 回调套回调套回调套回调套回调套回调套回调....

网友评论

    本文标题:函数解析 之 回调函数

    本文链接:https://www.haomeiwen.com/subject/msugzxtx.html