1.函数

数学函数:

x,y 任意的x => 确定的y
其中x自变量
y = f(x) 函数值就是确定的,具有确定性

函数式编程:

  1. 一个固定的功能或者是程序段被封装的过程
  2. 实现一个固定的功能或者程序
  3. 在这个封装体中需要一个入口,一个出口
  4. 入口就是参数, 出口就是返回
    1. function test(a, b,..){
    2. // 执行语句
    3. }

2.函数的基本写法

1.最基本的写法 => 函数声明

  1. function test(参数) {
  2. // 函数执行语句
  3. }

函数的命名规则

  1. 不能以数字开头
  2. 可以字母_$开头
  3. 中间可以包含数字字母_$
  4. 小驼峰命名法 => myWonderfulTest

2.表达式 字面量方法

  1. var test = function test1() {
  2. var a = 1,
  3. b = 2;
  4. console.log(a, b);
  5. }; // 注意这里是有分号的, 与任何变量初始化语句一样.
  6. // test1(); ✖
  7. // 调用使用 test()

匿名函数表达式 函数字面量

  1. var test = function() { // 匿名函数
  2. var a = 1,
  3. b = 1;
  4. console.log(a, b);
  5. }

3.函数的组成部分

函数名(可选), 参数(可选), 返回值 (return), 函数执行语句

  1. function 函数名(参数) {
  2. // 执行语句
  3. return 默认返回undefined
  4. }

1.参数

1.1实参,形参

  1. var aa = Number(window.prompt('a'));
  2. var bb = Number(window.prompt('b'));
  3. // a ,b => 形式上占位,形式参数 形参
  4. function test(a, b) {
  5. console.log(a + b);
  6. }
  7. // 实际参数 aa, bb
  8. test(aa, bb);

1.2 形参和实参数量可以不相等

  1. function test(a, b, c){
  2. console.log(a, b, c);
  3. }
  4. test(1, 2); // 1, 2, undefined
  5. test(1, 2, 3, 4); // 不会报错

2.arguments

实参传入值,函数内部时可以更改实参的值
实参没有传入值,函数内部不能更改

  1. function test(a, b) {
  2. console.log(test.length);
  3. console.log(arguments.length);
  4. }
  5. // 1.arguments 长度根据传入的参数的个数决定
  6. test(1, 2); // 2 2
  7. test(1, 2, 3); // 2, 3

调用一个函数,累加他的实参值

  1. function sum(){
  2. var a = 0;
  3. // arguments[i] 可以取到传入的实参的值
  4. for(var i = 0; i < arguments.length; i++){
  5. a += arguments[i];
  6. }
  7. }

3.return

return 之后函数后续不会执行

  1. 终止函数的执行
  2. 返回相应的值 ```javascript function test() { console.log(‘我正在执行’); return; console.log(‘我执行完了就结束这个函数’); }

console.log(test());

  1. <a name="GuoXH"></a>
  2. # 4.变量
  3. <a name="S3uxH"></a>
  4. ## 全局变量
  5. 1. 在全局环境下所声明的变量,在任何地方都可以访问
  6. 1. 函数内部可以定义变量,如 b = 2, 此时的b就是一个全局变量,当函数调用之后,就会定义这个变量,使其能够在函数外部进行访问。
  7. <a name="gDgH1"></a>
  8. ## 局部变量
  9. 在函数内部被声明的变量,只能在函数内部进行使用,函数外部无法进行访问,并且在函数执行之后,自动销毁。
  10. ```javascript
  11. a = 1;
  12. function test1() {
  13. var b = 2; // 函数test1所声明的局部变量
  14. console.log(a); // 打印出 1
  15. function test2() {
  16. var c = 3; // 函数test2所声明的局部变量
  17. console.log(b); // 打印出 2
  18. }
  19. test2();
  20. console.log(c); // 报错 因为c是函数test2 里面的局部变量,外部没有定义
  21. }
  22. test1();

5.作业

1、定义一个函数,从wp接受一个饮料的名称,函数返回对应的价格

  1. var drink = window.prompt('选择一个你想要喝的饮料');
  2. function priceDrink(drink){
  3. switch(drink){
  4. case '可乐':
  5. return '5元'
  6. case '怡宝':
  7. return '2元'
  8. case '茶派':
  9. return '5元'
  10. default:
  11. return '没有您选择的饮料'
  12. }
  13. }

2、定义一个函数,wp接收第一个值,接收一个运算符号,接收第二个值,然后进行运算

  1. var num1 = Number(window.prompt('请输入第一个数值'));
  2. var operator = window.prompt('请输入运算符号');
  3. var num2 = Number(window.prompt('请输入第二个数值'));
  4. function computer(num1, operator, num2){
  5. switch(operator){
  6. case '+':
  7. return num1 + num2
  8. case '-':
  9. return num1 - num2
  10. case '*':
  11. return num1 * num2
  12. case '/':
  13. return num1 / num2
  14. case '%':
  15. return num1 % num2
  16. default:
  17. return '请您检查输入的值'
  18. }
  19. }

3.定义一个函数,从wp接收一个n,算出n的阶乘 (不能用for)

  1. var n = window.prompt('请输入您要算出几的阶乘');
  2. // 运用递归的算法
  3. function factorial(n) {
  4. // 出口
  5. if(n === 1){
  6. return 1
  7. }
  8. return n * factorial(n - 1);
  9. }
  10. factorial(5)

4.定义一个函数,从wp接收一个n,算出斐波那契数列的第n位,不能用for循环.

  1. var n = Number(window.prompt('请你输入你想算出第几位的斐波那契数列'));
  2. function fabonacci(n) {
  3. if( n <= 2){
  4. return 1
  5. }
  6. return fabonacci(n - 1) + fabonacci(n - 2)
  7. }
  8. console.log(fabonacci(n));