美文网首页
回调与闭包

回调与闭包

作者: 距离方丈 | 来源:发表于2018-07-13 22:40 被阅读0次

1、回调函数

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

    在JS中,可以理解为函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。而Ajax的异步加载时用到了回调函数的,但其实回调不仅仅是用在异步中,同步操作也可以使用:

同步的场景: 即在每个函数执行完成后调用另一个函数

    异步的情况也很多:

网上的总结

2、闭包

  1)什么是闭包?

        能够读取其他函数内部变量的函数。在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成一个“定义在函数内部的函数”。创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。使用闭包有一个优点,也是它的缺点,就是可以把局部变量驻留在内存中,可以避免使用全局变量。

        Javascript 中,每个函数都有一个与之相关联的作用域链。每次调用 JavaScript函数的时候,都会为之创建一个新的对象用来保存局部变量,并把这个对象添加至作用域链中。当函数返回时,再将这个对象删除,此对象会被当做垃圾回收。但如果这个函数定义了嵌套的函数,并将它存储在某处的属性里,就意味着有了一个外部引用指向这个嵌套的函数。它就不会被当作垃圾回收,它所指向的变量绑定对象同样不会被回收。

  2)闭包特性

        a、函数嵌套函数

        b、.函数内部可以引用外部的参数和变量

        c、参数和变量不会被垃圾回收机制回收

  3)例子

foo函数中形成了一个闭包,只要bar函数在,垃圾回收机制就不会去动foo函数,而此时,我们的bar函数所指向的那个匿名函数就可以一直去访问那个number和x,而且每次调用,都会得到上一次被自增了以后的number。


参考:JavaScript之再谈回调与闭包 - Lance_lou - 博客园

相关文章

  • 回调与闭包

    1、回调函数 一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调...

  • 闭包与回调

    转载自:http://blog.csdn.net/u010142437/article/details/12453...

  • 【Swift】关于闭包的几种写法

    闭包 闭包是一个特殊的函数,经常用于回调 简单举个例子:在方法中定义闭包实现回调传值 尾随闭包:1.如果闭包是函数...

  • Swift基础语法-闭包,闭包函数回调,尾随闭包,闭包捕获值,循

    本节知识点 闭包的基本概念 闭包基本使用 闭包表达式作为回调函数 闭包的多种写法(尾随闭包) 闭包表达式优化 闭包...

  • 4 iOS类微信日志2018-01-13

    Swift 闭包的使用 步骤: 1. 声明闭包 2. 声明闭包的别名属性 3. 设置回调函数 4. 调用闭包 声明...

  • UI(二十)block

    *block代码块 闭包(一个区域)与C语言函数类似 *block具有反向传值、回调的功能 回调:执行完毕之后返回...

  • swift - 闭包回调

    在需要返回数据的页面secondViewController1.定义一个闭包 2.声明一个闭包 3.返回数据 完整...

  • swift 闭包回调

    1.跳转到需要回调的页面 2.跳转的页面 3 嵌套方法 使用

  • swift 闭包回调

    最近研究iOS8.0新出的控件UIAlertController也就是代替UIAlertView和UIAction...

  • ★ 回调函数、闭包

    普通函数和回调函数有什么区别? 什么是闭包? 普通函数和回调函数主要是在调用方式上的区别: 普通函数的调用:调用程...

网友评论

      本文标题:回调与闭包

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