JavaScript函数入门之定义与参数----函数系列(1)

函数重要的理由

  1. 在JavaScript对象可以做到的事情,函数几乎都可以做到,如:赋值,作为参数,作为函数返回值,动态创建,添加属性…
  2. 函数也是对象,特殊之处在于函数可调用(invokable)
  3. 回调函数

函数作为对象

  1. 可以为函数添加属性
  2. 存储函数
const store = {
    nextId: 1,
    cache: {},
    add: function(fn) {
        // fn.id == undefined
        if(!fn.id) {
            fn.id = this.nextId++;
            this.cache[fn.id] = fn;
            return true;
        } else {
            return false;
        }
    }
};

// test
function funcName() {};
store.add(funcName);            // true 第一次可以添加成功
store.add(funcName);            // false 第二次添加失败
  1. 自记忆函数(memoization)

将计算的记过存储起来,当第二次调用函数参数一致则直接返回计算结果(适用于大量计算等场景)

function isPrime(value) {
    // 第一次调用函数,给函数添加属性
    if (!isPrime.memo) {
        isPrime.memo = {};
    }
    // 检查是否有缓存,有的话直接返回
    if (isPrime.memo[value] !== undefined) {
        return isPrime.memo[value];
    }
    let prime = value !== 0 && value !== 1;     // 1 is not a prime
    for (let i = 2; i < value; i++) {
        if (value  % i === 0) {
            prime = false;
            break
        }
    }
    return isPrime.memo[value]  = prime;    // 存储并且返回计算结果prime
}

// test
console.log("5 is prime", isPrime(55))
console.log(isPrime.memo[55], "the 55 was cached")

总结:空间换时间

函数的定义方式

函数定义的四种方式:

  1. 函数声明/函数表达式
function funcName() {};             // 函数声明
const funcName2 = function() {};    // 函数表达式
  1. 箭头函数
myArgs => myArgs * 2;
  1. 函数构造函数
new Function('a', 'b', 'return a  + b');
  1. 生成器函数
function* myFunc() { yield 1;}

函数声明和函数表达式

  1. 函数声明
function funcName() {};  
// function关键字      必要
// functionName       必要
// ()                必要
// {}函数体            必要
  1. 函数表达式
var fn1 = function() {}     // 场景1: 函数表达式作为变量声明赋值语句的一部分
fn1(function () {           // --> 场景2:函数表达式作为#一次#函数调用的参数
    return function() {};   // --> 场景3: 函数表达式作为函数返回值
})
(function func1() {})()     // --> 场景4: 命名函数表达式,作为自执行函数的参数调用
+function () {} ();         
-function () {} ();         
!function () {} ();         
~function () {} ();         // --> 场景5: 函数表达式作为一元操作符立即调用函数的参数

箭头函数

。。。

函数的参数

两个概念

  1. 形参:定义函数时候所列举的变量
  2. 实参:调用函数时,实际传入的参数

两个特殊的参数

  1. this
  2. arguments

es6参数

  1. 剩余参数
function(args1, ...otherArgs) { } // 通过结构可以获取剩余参数
  1. 默认参数
function fn1(args1) {
    args1 = typeof args1 === "undefined" ? "defaultArgs" : args;    // es5 实现默认参数
}
function fn2(args1 = "default") {                                   // es6 实现默认参数

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值