函数常用知识解析:递归、arguments...

函数

1 函数的概念引入

希望某些逻辑或者特定功能的代码块可以被我们控制或者反复使用,此时可以考虑用函数封装。最大好处是提高代码复用。

  1. 可以对某些逻辑或者功能封装
  2. 将来可以被控制,可以反复使用

2 函数定义

  1. 调用和定义谁在先都可以
function 函数名() {
  // 函数体——具体代码
}
  1. 函数表达式 必须先定义后调用
var 函数名 = function () {
  // 函数体
};

3 函数调用

函数名();。函数定义完自己不会执行,需要去调用。

4 函数参数

函数定义时指定的参数叫形式参数,简称形参。多个形参之间用逗号隔开。函数调用的时候传入的参数叫实际参数,简称实参。
例:

function getSum(a, b) {
  // a b形参
  console.log(a + b);
}
getSum(10, 20); //实参

5 函数:arguments

函数内置一个对象 arguments 接受我们所有的实参。

// 函数内置一个对象 arguments 接受我们所有的实参
// arguments.length 表示实参个数
// arguments.callee 表示arguments所在的函数
// 函数名.length 表示函数形参个数
function getSum(a, b) {
  // console.log(arguments);
  // console.log(arguments.length);
  // console.log(arguments.callee);
  // console.log(getSum.length);
  if (arguments.length === getSum.length) {
    // console.log(a+b);
    console.log(arguments[0] + arguments[1]);
  } else {
    alert("抱歉,传递的参数个数不匹配");
  }
}

拓展 —— 实现求任意数的和:

// 实现求任意数的和
function getSum2() {
  // 对arguments
  var sum = 0;
  for (var i = 0; i < arguments.length; i++) {
    sum += arguments[i];
  }
  console.log(sum);
}
getSum2(1);
getSum2(2, 5);
getSum2(23, 45, 56);
getSum2(10, 20, 30, 40);

6 函数:return 关键字

  • return 用于返回值
  • return 一旦执行,后面的代码不会执行
  • return; 此时 return 结束函数调用

7 函数递归

函数自己调用自己

1、求 n 的阶乘

//普通方法
function fnFac(n) {
  var res = 1;
  for (var i = 1; i <= n; i++) {
    res = res * i;
  }
  return res;
}

//递归方法
function fnFac(n) {
  if (n === 1) {
    // 递归结束条件
    return 1;
  } else {
    return n * fnFac(n - 1); // 函数中调用自己
  }
}

2、用递归求 100 以内所有偶数和

//递归
function evenSum(num) {
  if (num === 2) {
    return 2;
  } else {
    return num + evenSum(num - 2);
  }
}
console.log(evenSum(100));

3、斐波那契数列

0 1 1 2 3 …第 n 个数等于前两个数字之和

function fiborila(n) {
  if (n === 1) {
    return 0;
  } else if (n === 2) {
    return 1;
  } else {
    return fiborila(n - 1) + fiborila(n - 2);
  }
}

函数相关知识拓展

将函数的实际参数转换成数组的方法

方法一:var args = Array.prototype.slice.call(arguments);

方法二:var args = [].slice.call(arguments, 0);

方法三:

var args = [];
for (var i = 1; i < arguments.length; i++) {
  args.push(arguments[i]);
}

转成数组的通用函数

var toArray = function (s) {
  try {
    return Array.prototype.slice.call(s);
  } catch (e) {
    var arr = [];
    for (var i = 0, len = s.length; i < len; i++) {
      //arr.push(s[i]);
      arr[i] = s[i]; //据说这样比push快
    }
    return arr;
  }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值