字符串方法 函数声明 函数表达式 参数 返回值 不定参列表 纯函数 函数副作用 匿名函数 IIFE 柯理化函数 函数注释

43 阅读5分钟

字符串方法

charAt()
从一个字符串中返回指定的字符,超出范围返回空字符串
    `var str = '大家好';
    console.log(str.charAt(2));`//返回str[2]的值
indexOf()
返回在字符串中可以找到一个给定字符串的第一个 首字 对应索引,不存在,返回-1
'undefined'.indexOf()  返回0,默认参数也是undefined
第二个参数,起始位置超出范围返回 长度
其他和数组的一样
split()
以split括号里面的内容对字符串进行拆分成字串放入一个数组中
如果有第二个参数限制长度,就按参数长度放入数组中,多余部分省略
没有传参就直接将字符串一整个放入数组中
   `var str = '大家好!';
    var arr = str.split('');
    console.log(arr);//返回['大','家','好','!']`
slice()
规则和数组一样
trim()
用于删除字符串左右两边的空白字符

字符串方法练习

找到整段话里面“假如”的位置
       `var str = '假如给我三天光明,假如给我一个大西瓜';
        var idx = 0;
        var targetIdx = 0;
        while(str.indexOf('假如', idx) !== -1){
          targetIdx = str.indexOf('假如',idx);
          console.log(targetIdx);
          idx = targetIdx + 2;
        }`
 将话里面的“假如”换成[假如]

函数

封装一段代码,方便重复使用
函数的定义
1.函数声明
    function fn(){
        console.log();
    }
    fn(); //调用函数  执行函数名称为fn的函数
2.函数表达式
    var fn = function(){
        console.log();
    }
参数
能够让我们的函数处理不同的原始数据 从而得出不同的结果eg 1循环到100 1循环到n
1.实参
2.形参  
    自定义命名 个数随意 和实参对应位置 
    默认值undefined
    形参会在函数内隐式声明为局部变量
3.不定参arguments

 打印1-10的和的结果
   endNum形参 它的值 取决于 对应传递的实参的值 默认为 undefined
        `function sum(endNum){
             var count = 0;
             for(var i = 1; i <= endNum; i++){
                count += i;
             }
             console.log(count);
          }
          sum(10);`
返回值
     默认的返回值是undefined
     函数内部执行到return这一行就结束了,后面的内容就不执行了
           `function sum(x, y){
              return x + y;
            }
            var result = sum(1,2);//把返回值进行赋值给result
            console.log(result);`//把返回值进行打印
题1
返回 参数,数组中的最大值
        `function getMax(arr){
             var maxNum = arr[0];
             for(var i = 0, len =arr.length; i < len; i++){
               if(maxNum <= arr[i]){
                 maxNum = arr[i];
               }
             }
             return maxNum;
           }
           var maxNumber = getMax([11,2,55,75,32,4]);
           console.log(maxNumber);`
           
利用函数return之后代码不会执行的性质
可以将之前 if  else if  else if  else分支 拆成多条并行的if
分数 100-91 A、90-81 B、80-71 C、70-61 D、60-0 E
`function getLevel(num){
     if(num <= 100 && num > 90){
       return 'A';
     }
     if(num > 80){
       return 'B';
     }
     if(num > 70){
       return 'C';
     }
     if(num > 60){
       return 'D';
     }
     return 'E';
   }
   console.log(getLevel(89));`

有先决条件,结合return使用,使用先置排除法
判断一个数是不是数字
    `function isNumber(num){
         if(Number(num) !== num){
           return '不是数字';
         }
         return '是数字';
     }
     console.log(isNumber(8));`

return用于常规流程,用于过滤
求输入值的2次方 前面两个if是用于过滤
   `function getPow(num){
      if(Number(num) !== num){
        return 0;
      }
      if(num === 0){
        return 0;
      }
      return num ** 2;
    }
    console.log(getPow(3));`
题2
好的函数 是一个函数只做一件事
获取数组中 最大值的二分之一 +10 的结果

        `//num的l(L的小写)次幂
        function getPow(num, l){
          return num ** l;
        }
        //num除以l
        function getHaf(num, l){
          return num / l;
        }
        //num + l
        function getSum(num, l){
          return num + l;
        }
        //数组中的最大值
        function getMax(arr){
          var len = arr.length;
          var maxNum = arr[0];
          for(var i = 0; i < len; i++){
            if(maxNum < arr[i]){
              maxNum = arr[i];
            }
          }
          return maxNum;
        }

        var result = getSum(getHaf(getMax([11,43,53,9,30]),2),10);
        console.log(result);
        console.log(getMax([11,43,53,9,30]))`
        
arguments不定参列表 是实参列表的集合
函数在调用的时候传入的实参 形成arguments  用于传参个数不确定的情况
是类数组
长得像数组 有length 可以遍历 不能使用数组方法
//求N个数之和
       `function getSum(){
          var count = 0;
          for(var i = 0, len = arguments.length; i < len; i++){
            count += arguments[i];
          }
          return count;
        }
        console.log(getSum(1, 2, 3, 4, 23, 43, 32));`
 //获取前两个之和,修改第一个的值为100
        `function getSum(){
            arguments[0] = 100;
            return arguments[0] +arguments[1];
        }
        console.log(getSum(1, 2, 3, 4, 23, 43, 32));`
        
        
push

   `var arr = [1, 2, 3];
    function push(){
      var arr = Array.isArray(arguments[0]) && arguments[0] || [];
      var argLen = arguments.length;
      for(var i = 1; i < argLen; i++){
        arr[arr.length] = arguments[i];
      }
      return arr;
    }
    console.log();
    console.log(push(arr, 9, 8));`

函数分类

纯函数
    有参数 有对应参数的返回值
    该函数不会产生任何可观察的副作用
        `function pure(a,b){
            return a + b;
        }`
非纯函数(函数副作用)
        `var x = 10;
        function noPure(){
            x = 20;
            console.log(x + '哈哈哈');
        }`
匿名函数
格式一:
    `var x = function(){
        console.log('你好');
    }`
格式二:
    `function (){}`
IIFE匿名函数自调用
格式一:(匿名函数)();
格式二:(匿名函数());
    `(function(){
        console.log('我是IIFE自调用函数');
    })();`
柯理化函数
   `function currying(a){
        return function(b){
            return a + b;
        }
    }
    var result = currying(1)(2);
    console.log(result);`
函数注释
在vs中下载安装插件 keroFileHeader
    //有个number数组 判断数组里面有没有小于0的数 如果有返回“纯在负值” 如果没有返回“不存在负值”
 函数注释:
    /**
     * @description:判断 number数组中是否纯在负值
     * @param{Array} arr 需要判断的数组
     * @return{String} 判断结果
     * @author 编辑人
     * @Date: 年月日 时分秒
     */
     
    `function isPositiveNumber(arr){
      for(var i = 0, len = arr.length; i < len; i++){
        if(arr[i] < 0){
          return '存在负值';
        }
      }
      return '不存在负值';
    }
    console.log(isPositiveNumber([1,33,4]));
    `