函数与函数式编程

162 阅读2分钟

函数定义

函数声明

fn();  // function

function fn() {
    console.log('function');
}

函数表达式

// 变量声明
var a = 20;

// 实际执行顺序
var a = undefined;  // 变量声明,初始值undefined,变量提升,提升顺序次于function声明
a = 20;  // 变量赋值,该操作不会提升

匿名函数

var a = 10;
var fn = function(bar, num) {
    return bar() + num;
}

fn(function() {
    return a;
}, 20)

自执行函数

(function() {
    // 私有变量
    var age = 20;
    var name = 'Tom';

    // 私有方法
    function getName() {
        return `your name is ` + name;
    }

    // 共有方法
    function getAge() {
        return age;
    }

    // 将引用保存在外部执行环境的变量中,形成闭包,防止该执行环境被垃圾回收
    window.getAge = getAge;
})();

函数自执行的方式另外还有其他几种写法,诸如!function(){}()+function(){}()

函数参数

1.显式参数:形参、实参

2.隐藏参数(arguments)

3.默认参数

4.参数传递方式:值传递

函数调用

1.作为一个函数调用

function myFunction(a, b) {    return a * b;}myFunction(10, 2);           // myFunction(10, 2) 返回 20

2.函数作为方法调用

var myObject = {    firstName:"John",    lastName: "Doe",    fullName: function () {        return this.firstName + " " + this.lastName;    }}myObject.fullName();         // 返回 "John Doe"

3.作为构造函数调用

// 构造函数:function myFunction(arg1, arg2) {    this.firstName = arg1;    this.lastName  = arg2;}// This creates a new objectvar x = new myFunction("John","Doe");x.firstName;                             // 返回 "John"

4.call/apply调用

函数重载

可以通过arguments对象来模拟实现一个函数重载的功能。

function fn(a){
  if(arguments.length === 1){
    console.log(1)
  }else{
    console.log(2)
  }
}
fn(1)  // 1
fn(1,2)  // 2

函数扩展

ES6函数的扩展

函数式编程

JavaScript并不是一门纯函数式编程的语言,但是它使用了许多函数式编程的特性。

函数式编程特征

1.函数是第一等公民

2.只用"表达式",不用"语句"

3.纯函数(没有"副作用")

4.不修改状态

5.引用透明性

参考:

前端基础进阶(九):函数与函数式编程

这些有关函数参数的知识点你都了解么?

JavaScript 中的求值策略

一文带你了解什么是JavaScript 函数式编程?

简明 JavaScript 函数式编程——入门篇

函数式编程进阶:杰克船长的黑珍珠号

JavaScript函数之美~