• js函数是一等公明


    函数是一种能被调用的对象

    对象具有的特征,在js中的函数都具备。而且js中的函数还具备对象不具备的特征,那就是调用。

    1. 通过字面量创建
    2. 赋值给变量,数组项或其他对象的属性
    3. 可以作为函数的参数来传递。(回调)
    4. 可以作为函数的返回值。(闭包)
    5. 函数可以动态添加属性。(典型用例,缓存)

    回调函数

    回调产生的前提:函数作为参数传到另一个函数中。

    重要的回调例子:处理事件、简单的排序集合

    例子:主要来看数组排序

    var values = [0, 3, 2, 5, 7, 4, 8, 1];
    values.sort(function(value1, value2) {
    return value1- value2;
    });

    函数可以添加属性

     例子1:为集合中添加功能不重复的函数

    注:本例子通过给函数贴标签的形式来判断函数是否被添加。还有一方面就是缓存的问题,这里的缓存是对象和 函数合作的结果
    var store = {
          cache: {},
          add: function(fn,name) {
            if (fn[name]==undefined) {
              //console.log(this);
              fn.name = name;
              this.cache[name]= fn;
              return true;
          } else {
              return false;
            }
          }
        };
    
        function ninja(){console.log("你是谁,我是张大里胡茬")}
        function zhangsan(){console.log("我叫张三,我是来做测试的,我是小白鼠")}
        function lisi(){console.log("哼,我叫李四,我是来体验生活的,生活如此美好")}
        store.add(ninja,"ninja");
        store.add(lisi,"lisi");
        store.add(lisi,"lisi");
        store.add(zhangsan,"zhangsan");
        store.cache.ninja();

     例子2:缓存(这里很妙)

    function isPrime(value) {
          if (!isPrime.answers) {
            isPrime.answers = {};
          }
    
          if (isPrime.answers[value] !== undefined ) {
          //检查传入的数据是否已经缓存。如果缓存了,就不会继续执行,return,并且将值给出
          //如果没有缓存则继续向下走进行计算,将计算过后的值给出
            return isPrime.answers[value];
          }
    
          var prime =value!==0 && value !== 1;
    
          for (var i = 2; i < value; i++) {
            if (value % i === 0) {
              prime = false;
              break;
            }
          }
    
          return isPrime.answers[value] = prime;
        }
    
        isPrime(5)//此函数确认一个数是否是素数

      例子3:记录函数函数执行次数

    function isPrime() {
        if (isNaN(isPrime.num)) {
            isPrime.num=0;
        }else{
            isPrime.num++;
            }
            
        }
        isPrime();
        isPrime();
        isPrime();
    一生的日子很长,一定要注意调节,要劳逸结合
  • 相关阅读:
    列表推导式,生成器表达式
    迭代器,生成器初始
    装饰器的进阶
    函数名用途,初始装饰器
    函数参数,和空间
    py文件的操作
    字符串相关操作
    python基础二
    Django简介
    Django初识
  • 原文地址:https://www.cnblogs.com/weikemudan/p/11124602.html
Copyright © 2020-2023  润新知