zoukankan      html  css  js  c++  java
  • javascript回调函数

    函数也是对象

      想弄明白回调函数,首先的清楚地明白函数的规则。在javascript中,函数是比较奇怪的,但它确确实实是对象。确切地说,函数是用Function()构造函数创建的Function对象。Function对象包含一个字符串,字符串包含函数的javascript代码。假如你是从C语言或者java语言转过来的,这也许看起来很奇怪,代码怎么可能是字符串?但是对于javascript来说,这很平常。数据和代码之间的区别是很模糊的。

    1
    2
    3
    //可以这样创建函数
    var fn = new Function("arg1", "arg2", "return arg1 * arg2;");
    fn(2, 3); //6

      这样做的一个好处,可以传递代码给其他函数,也可以传递正则变量或者对象(因为代码字面上只是对象而已)。

    传递函数作为回调

      很容易把一个函数作为参数传递。

    1
    2
    3
    4
    5
    6
    7
    8
    function fn(arg1, arg2, callback){
     var num = Math.ceil(Math.random() * (arg1 - arg2) + arg2);
     callback(num);  //传递结果
    }
     
    fn(10, 20, function(num){
     console.log("Callback called! Num: " + num);
    });    //结果为10和20之间的随机数

      可能这样做看起比较麻烦,甚至有点愚蠢,为何不正常地返回结果?但是当遇上必须使用回调函数之时,你也许就不这样认为了!

         那看看下面的示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function foo(){
     var a = 10;
     return function(){
      a *= 2;
      return a; 
     };
    }
    var f = foo();
    f(); //return 20.
    f(); //return 40.

      函数在外部调用,依然可以访问变量a。这都是因为javascript中的作用域是词法性的。函数式运行在定义它们的作用域中(上述例子中的foo内部的作用域),而不是运行此函数的作用域中。只要f被定义在foo中,它就可以访问foo中定义的所有的变量,即便是foo的执行已经结束。因为它的作用域会被保存下来,但也只有返回的那个函数才可以访问这个保存下来的作用域。返回一个内嵌匿名函数是创建闭包最常用的手段。

     回调是什么?

    使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。
    —— 某专家
    回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。
    —— 绿叶

  • 相关阅读:
    angular2监听页面大小变化
    angular如何引入公共JS
    angular使用Md5加密
    angular4模块中标签添加背景图
    angular使用sass的scss语法
    设置angular公共样式表
    更改angular的默认端口
    angular模拟web API
    RN与webview通讯
    shell通过ping检测整个网段IP的网络状态脚本
  • 原文地址:https://www.cnblogs.com/lanlanJser/p/6861125.html
Copyright © 2011-2022 走看看