工作生活

函数一等公明

2019-07-03  本文已影响0人  王牡丹爱写作

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

对象具有的特征,在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)//此函数确认一个数是否是素数
上一篇下一篇

猜你喜欢

热点阅读