资讯专栏INFORMATION COLUMN

关于js的回调函数

W4n9Hu1 / 2183人阅读

摘要:回调函数定义回调是一个函数,它作为参数传递给另一个函数,并在其父函数完成后执行。这意味着回调函数本质上是一个闭包。正如我们所知,闭包能够进入包含它的函数的作用域,因此回调函数能获取包含它的函数中的变量,以及全局作用域中的变量。

回调函数 定义
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
回调是一个函数,它作为参数传递给另一个函数,并在其父函数完成后执行。
函数也是对象

1、函数是一种对象

function test() {};
console.log(test instanceof Object);    //    true

很明显函数是一种对象,但你不能说函数是对象的一种。因为他俩之间是没有包含关系的。有点像鸡蛋和鸡的关系。

2、对象都是通过函数创建的
先来看一个例子

function test() {
    this.name="哈哈"
};
var test2=new test();
console.log(test2 instanceof Object);    //true

这个例子可以说明对象可以被函数创建。那为什么要说对象都是通过函数创建的,那对象字面量是不是也是通过函数来创建的,答案是肯定的,这是一种语法糖方式。举个简单的例子

var obj={
    name:"哈哈",
    age:"18"
}
var obj=new Object()
obj.name="哈哈";
obj.age="18";

上面的对象字面量其实是通过下面的构造函数来创建的。而其中的Object是一种函数:

console.log(typeof Object)    //function

通过上面的简单例子我们可以得出一个结论:对象是通过函数创建的,而函数又是一种对象。

js的函数可以作为参数进行传递

再看下面两段代码:

function say (value) {
    console.log((value));
}
function execute (someFunction, value) {
    someFunction(value);
}
execute(say, "hi js.");

function execute (someFunction, value) {
    someFunction(value);
}
execute(function(value){console.log((value));}, "hi js.");

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

实际上:

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

function (value) {
    alert(value);
}

这里的say或者匿名函数就被称为回调函数!

回调函数是闭包

都能够我们将一个毁掉函数作为变量传递给另一个函数时,这个毁掉函数在包含它的函数内的某一点执行,就好像这个回调函数是在包含它的函数中定义的一样。这意味着回调函数本质上是一个闭包。

正如我们所知,闭包能够进入包含它的函数的作用域,因此回调函数能获取包含它的函数中的变量,以及全局作用域中的变量。

如何避免回调地狱

你可以有如下几个方法:

• 模块化:将回调函数分割为独立的函数
• 使用Promises
• 使用yield 
• 来计算生成器或Promise

解析:这个问题有很多种答案,取决你使用的场景,例如ES6, ES7,或者一些控制流库。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105761.html

相关文章

  • 关于js回调、同步回调、异步回调

    摘要:回调定义刚开始学习时,对回调函数的理解仅仅停留在知道定义阶段。什么是回调函数就是将一个函数作为参数传递给另一个函数,作为参数的这个函数就是回调函数。参考文章详解回调函数以为例解读异步回调和异步编程的种方法阮一峰的网络日志 回调定义 刚开始学习javascript时,对回调函数的理解仅仅停留在知道定义阶段。什么是回调函数? 就是将一个函数作为参数传递给另一个函数,作为参数的这个函数就是回...

    BakerJ 评论0 收藏0
  • 同步与异步、异步与回调

    摘要:同步与异步以上为同步代码,函数必须等函数执行完毕后才能执行。异步回调产生的结果就是,函数的调用并不直接返回结果,而往往是交给回调函数进行异步处理。 同步与异步: function a(){} function b(){} a(); b(); 以上为同步代码,函数b必须等函数a执行完毕后才能执行。 function a(){ ...

    dinfer 评论0 收藏0
  • 彻底理解JavaScript中回调函数 (推荐)

    摘要:在中回调函数非常重要,它们几乎无处不在。首先你得先明白一点函数也是对象想弄明白回调函数,首先的清楚地明白函数的规则。理解了函数也是对象,先不急聊回调函数,先看看下面代码只写变量名返回的将会是方法本身,以字符串的形式表现出来。 在javascript中回调函数非常重要,它们几乎无处不在。像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是...

    RayKr 评论0 收藏0
  • 一个关于回调故事

    摘要:回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。大体意思就是回调是通过函数定义的变量通过参数传入另一个函数,在另一个函数进行调用,我们就称之为回调函数。 1.回调的故事 1.最近辞职换了新工作,新公司的工作模式是前后端分离的,但是目前前端框架还需要了解以及熟悉,之前的框架又想废弃,于是不得不用原生来开发,但是原生得造轮子...

    Backache 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<