函数

函数式编程

  1. function test(){
  2. //执行语句
  3. }
  • 高内聚->低耦合->模块单一责任制
  • 函数可以解耦 ```javascript if(3>1){ test() }

if(2>1){ test() }

if(5>1){ test() }

function test(){ for(var i=0;i<10;i++){ console.log(i); } }

  1. <a name="v2hzB"></a>
  2. ### 函数写法
  3. <a name="7clYp"></a>
  4. #### 函数声明
  5. ```javascript
  6. function test(参数){
  7. //函数执行语句
  8. }
  • 函数命名规则
    • 不能以数字开头
    • 字母.下划线 美元符号开头
    • 内不可以包含数字
    • 驼峰式命名
      • 表达式 字面量
        1. var a = '10'//'10'就是字面量
        2. var test = function test1(){
        3. var a = 1;
        4. console.log(a);
        5. //test1(a++);
        6. //test1可以在函数内部使用。在函数外不可见 递归时候可以使用
        7. }
  • 匿名函数表达式 函数字面量

    • 匿名函数就是函数字面量
      1. var a= function(x){console.log(x)}//
      2. var test = function(){
      3. var a = 1;
      4. console.log(a);
      5. }
  • 形参和实参 ```javascript var aa = Number(window.prompt(‘a’)); var bb = Number(window.prompt(‘b’));

function test(a,b){ //a,b是占位 形式占位 形参 console.log(a,b); }

  1. <a name="eWkTJ"></a>
  2. #### 例子
  3. - 实参求和
  4. ```javascript
  5. function sum(){
  6. var total = 0;
  7. for(var i = 0;i<arguments.length;i++){
  8. total += arguments[i];
  9. }
  10. console.log(total);
  11. //return total
  12. }
  13. sum(1,2,3,4,5,6,7);
  • arguments
    • 函数内部可以修改实参的值;
    • 实参如果没传值,但是函数里面形参改了,arguments[x] x代表未传值的实参。 undefined ```javascript function test(a,b){ a = 2; b = 3; console.log(a,b);//2,3 console.log(arguments[1])//undfined //实参没有传入的形参,则这个形参在函数内部无法赋值; } test(1)

function test(a,b){ b = 3; console.log(b);//3 } test(1);

  1. - 形参是存在栈内存中,实参是存在堆内存中。
  2. <a name="YyMMO"></a>
  3. ### 函数返回值
  4. - 返回之后这个函数就结束了了。
  5. - 返回相应的值。
  6. ```javascript
  7. function test(){
  8. return ;//默认返回undefined
  9. }
  • 全局变量,局部变量[[scope]]

    • 外部不能获取到内部的值
    • 内部可以获取到内部的值
      1. var a = 1;
      2. function test1(){
      3. console.log(a);//a=1;
      4. var b = 2;
      5. function test2(){
      6. console.log(b);//b=2;内部可以获取到外部的值
      7. var c =3;
      8. console.log(c);
      9. }
      10. console.log(c)//c is not defined
      11. test2();
      12. }
  • 作用域 ```javascript function test1(){ var a = 1; console.log(a) }

function test2(){ var b = 2; console.log(a);// reference error a is not defined } test1(); test2();

  1. 作业
  2. - 定义个函数。从wp接受一个饮料名称,返回对应价格;
  3. - 定义个函数。 wp接受一个数,接受一个运算符 接收第二个数用这个函数运算。返回运算结果
  4. - 定义个函数。 wp接收一个数 算出他的阶乘 不能有for 循环;
  5. - 定义个函数, wp接受一个数 算出斐波那契数列第n 不能用for循环。
  6. ```javascript
  7. //作业三
  8. function getMulti(n,mul) {
  9. var mul = mul||1;
  10. if (n == 1) {
  11. return mul;
  12. }
  13. mul *= n;
  14. n--;
  15. return getMulti(n,mul);
  16. }
  17. console.log(getMulti(3));