JavaScript中函数的几个成员与高阶函数

 //函数中有一个name属性----->函数的名字,name属性是只读的,不能修改
//函数中有一个arguments属性--->实参的个数
//函数中有一个length属性---->函数定义的时候形参的个数
//函数中有一个caller属性---->调用(f1函数在f2函数中调用的,所以,此时调用者就是f2)
function f1(x,y) {
  console.log(f1.name);
  console.log(f1.arguments.length);
  console.log(f1.length);
  console.log(f1.caller);//调用者
}

// f1.name="f5";
// f1(10,20,30,40);
// console.dir(f1);

function f2() {
  console.log("f2函数的代码");
  f1(1,2);
}
f2();

==========================================================
02高阶函数之函数作为参数使用:

  function f1(fn) {
    console.log("f1的函数");
    fn();//此时fn当成是一个函数来使用的
  }
  //fn是参数,最后作为函数使用了,函数是可以作为参数使用
  //传入匿名函数
  f1(function () {
    console.log("我是匿名函数");
  });
  //命名函数
  function f2() {
    console.log("f2的函数");
  }
  f1(f2);
  //函数作为参数的时候,如果是命名函数,那么只传入命名函数的名字,没有括号

    function f1(fn) {
    setInterval(function () {
      console.log("定时器开始");
      fn();
      console.log("定时器结束");
    },1000);
  }

  f1(function () {
    console.log("好困啊,好累啊,就是想睡觉");

===========================================================
03高阶函数之函数作为返回值使用:

           function f1() {
            console.log("f1函数开始");
            return function() {
                console.log("我是函数,但是此时是作为返回值使用的");
            }

        }

        var ff = f1();
        ff();

        var num = 10;
        console.log(typeof num); //获取num这个变量的数据类型
        var obj = {}; //对象
        //判断这个对象是不是某个类型的
        console.log(obj instanceof Object);
        //获取某个对象的数据类型的样子
        //Object.prototype.toString.call(对象);//此时得到的就是这个对象的类型的样子

        //此时输出的是Object的数据类型   [object Object]
        /   console.log(Object.prototype.toString());
        //输出的数组的数据类型      [object Array]
        console.log(Object.prototype.toString.call([]));

        var arr = [10, 20, 30];
        console.log(Object.prototype.toString.call(arr));

        console.log(Object.prototype.toString.call(new Date()));

        //获取某个对象的类型是不是你传入的类型
        //[10,20,30] 是不是"[object Array]"
        //type---是变量----是参数----"[object Array]"
        //obj---是变量-----是参数----[10,20,30];

        //判断这个对象和传入的类型是不是同一个类型
        function getFunc(type) {
            return function(obj) {
                return Object.prototype.toString.call(obj) === type;
            }
        }

        var ff = getFunc("[object Array]");
        var result = ff([10, 20, 30]);
        console.log(result);

        var ff1 = getFunc("[object Object]");
        var dt = new Date();
        var result1 = ff1(dt);
        console.log(result1);

============================================================
04函数作为参数的案例:

// var arr = [1, 100, 20, 200, 40, 50, 120, 10];
// //排序
// arr.sort();
// console.log(arr);

var arr = [1, 100, 20, 200, 40, 50, 120, 10];
//排序---函数作为参数使用,匿名函数作为sort方法的参数使用,那么此时的匿名函数中有两个参数,
arr.sort(function (obj1,obj2) {
  if(obj1>obj2){
    return -1;
  }else if(obj1==obj2){
    return 0;
  }else{
    return 1;
  }
});
console.log(arr);

var arr1=["acdef","abcd","bcedf","bced"];
arr1.sort(function (a,b) {
  if(a>b){
    return 1;
  }else if(a==b){
    return 0;
  }else{
    return -1;
  }
});
console.log(arr1);

=============================================================
05函数作为返回值的案例:

//排序,每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序

//三部电影,电影有名字,大小,上映时间
function File(name, size, time) {
  this.name = name;//电影名字
  this.size = size;//电影大小
  this.time = time;//电影的上映时间
}
var f1 = new File("jack.avi", "400M", "1997-12-12");
var f2 = new File("tom.avi", "200M", "2017-12-12");
var f3 = new File("xiaosu.avi", "800M", "2010-12-12");
var arr = [f1, f2, f3];

function fn(attr) {
  //函数作为返回值
  return function getSort(obj1, obj2) {
    if (obj1[attr] > obj2[attr]) {
      return 1;
    } else if (obj1[attr] == obj2[attr]) {
      return 0;
    } else {
      return -1;
    }
  }
}

var ff = fn("name");

//函数作为参数
arr.sort(ff);
for (var i = 0; i < arr.length; i++) {
  console.log(arr[i].name + "====>" + arr[i].size + "===>" + arr[i].time);
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • 今天去县城参加了雷哥女儿的满月宴。 哈哈,能宝走到哪里都是被夸被喜欢的娃娃。家里亲戚见了都夸他长得好看,说我会带孩...
    林培阅读 242评论 0 4
  • 目标: 1、有个健康智慧的宝宝。 2、财富目标9月份收入2万元。 感恩冥想: 1、感恩父母的养育之恩,祝爸爸妈妈公...
    孙煜涵阅读 116评论 0 0
  • 临摹马克笔仙人掌,第一次涂色完全控制不住自己的手,各种涂出格。 总结经验: 1.涂色前一定要试色,不能完全相信笔盖...
    苏青梵阅读 289评论 0 3
  • 今天早上,室友们很早出门,我有了机会可以自己独处一室,睡了很沉,很久,十点半,刚刚醒过来,睡饱觉的感觉真的好好哦...
    蜗牛丹阅读 329评论 0 0