高级之路篇二十一:全面解析js一等公民function

初识function:

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

1、具名函数

var fun = function(){....}

  此种方式变量会提升,函数体留原地。

function fun(){....}

  此种方式变量函数体都会提升至最顶端,位于变量声明提前之前。

2、匿名函数

setTimeout(function(){....}, 1000)

  缺点:

  • 追踪栈中没函数名,调试困难
  • 如果需要引用自身,只能用arguments.callee(ES5严格模式禁用)
  • 降低了函数可读性、可理解性

3、立即执行函数

立即执行函数表达式用法:

//第一种
(function(){}()); 

//第二种
(function(){})();

4、头等函数 、高阶函数

函数接收函数作为参数,并返回一个函数,例如:

5、一元函数

只接收一个参数的函数

6、偏函数

创造一个新函数,让现有的一些参数值固定。比如bind实现偏函数:

function fun(a, b){
    return a + b;
}

var test = fun.bind(null, 1);
test(2); // 3

6、柯里化函数

将一个多个参数的函数转换为几个一元函数序列化的过程。例如:

//多个参数函数
function add(a, b){
    return a + b;
}

//柯里化
function add(a){
    return function(b){
        return a + b;
    }
}

7、纯函数

返回值由其参数决定,没有任何副作用的函数。

8、箭头函数

  • 没有this,arguments
  • 不能与new一起使用,不能通过bind改变函数体this指向
  • 写法更简洁
  • 性能更优
  • 箭头函数全是匿名函数

9、生成器

  • function和函数名之间有一个*号
  • 函数体内部使用了yield表达式
  • yieldreturn一起使用的话,return后面的yield无效
  • 没有return,最后结果将是undefined

10、Function构造函数

  • 由此种方式生成的函数,运行时,它们只能访问自己的本地变量和全局变量,不能访问Function构造器被调用生成的上下文的作用域。这和使用带有函数表达式代码的 eval 不同。
  • 想要避免闭包,请考虑用它。
  • 使用Function构造器生成的Function对象是在函数创建时解析的。这比你使用函数声明或者函数表达式(function)并在你的代码中调用更为低效,因为使用后者创建的函数是跟其他代码一起解析的

猜你喜欢

转载自blog.csdn.net/HuaiCheng9067/article/details/90205849