美文网首页
JS函数专题

JS函数专题

作者: 12end | 来源:发表于2018-12-14 06:46 被阅读0次

    函数编写

    JS的函数可以嵌套(骚不骚?但是好像其他语言也支持?)

    <scirpt>
    function Function_name()
    {
        function second()
        {
        }
    }
    </script>
    

    变量提升
    JavaScript的函数定义时,它会先把函数体扫一遍,然后把所有的变量声明提升到函数顶部(这才是最骚的叭~)

    arguments参数
    只在函数内部起作用,永远指向函数调用者传入的所有参数,类似Array但不是Array
    利用 arguments 获得所有参数(求和)

    function sum(a,b)
    {
         if(arguments.length===0)
             return 0;
         var s=0;
         for(var i=0;i<arguments.length;++i)
              s+=arguments[i];
         return s;
    }
    sum();
    sum(1);
    sum(1,2);
    sum(1,2,3,4,5);
    

    rest参数
    要想获得函数参数列表外的剩余参数,使用rest更为方便,当参数数量不够填满参数列表时,rest是一个空数组,而在参数将参数列表填满后,会被包括在rest数组中。

    方法

    在一个对象中绑定函数,称为这个对象的方法
    在一个方法中,this这个特殊变量始终指向当前对象
    通过 apply() 可以控制this的指向

    function getAge() {
        var y = new Date().getFullYear();
        return y - this.birth;
    }
    var xiaoming = {
        name: '小明',
        birth: 1990,
        age: getAge
    };
    xiaoming.age(); // 25
    getAge.apply(xiaoming, []); // 25, this指向xiaoming, 参数为空
    

    改变this的另一个方法是 call()

    Math.max.apply(null,[1,2,3]);
    Math.max.call(null,1,2,3);
    

    (对于普通函数调用,通常把 this 绑定为 null
    装饰器
    利用 apply() ,动态改变函数行为。
    统计使用了多少次 parseInt() 函数

    var count =0;
    var oldparseInt=parseInt;
    window.parseInt = function()
    {
        ++count;
        return oldparseInt.apply(null,arguments);//调用原函数
    }
    

    高阶函数

    第一次见,觉得贼牛逼。。
    就是说,函数的参数可以接收另外一个函数作为参数,这样的函数称之为 高阶函数

    //一个简单的高阶函数
    function add(x,y,f)
    {
        return f(x)+f(y);
    }
    add(1,-3,Math.abs);
    

    map/reduce

    map
    map() 定义在JavaScript的 Array 中,调用 Arraymap() 方法,传入自定义函数,得到一个新的 Array

    function pow(x)
    {
        return x*x;
    }
    
    var arr=[1,2,3,4,5];
    var ans=arr.map(pow);
    //[1,4,9,16,25]
    

    map() 在处理数组时及其方便
    reduce
    同样的,reduce() 定义也在 Array 中,它接收一个函数作为参数,作用效果是顺序地将运算结果与数组中下一个元素做运算。

    利用reduce()求积

    function product(arr)
    {
        return arr.reduce(
            function(x,y)
                {return x*y}
        );
    }
    

    通过map,reduce实现 String2int()

    function String2int(s)
    {
       return s.split("").map(x=>x*1).reduce((x,y)=>x*10+y);
    }
    

    实现首字母大写

    function(arr)
    {
        return arr.map(v=>v.substring(0,1).toUpperCase()+v.substring(1,v.lengtn).toLowerCase());
    }
    

    filter

    filter() 用于过滤 Array 中的元素,返回剩下的元素,接受一个函数作为参数。

    //删掉偶数
    var arr = [1,2,3,4,5];
    var A=arr.filter(function(x){return x%2!==0;})
    //[1,3,5]
    //删掉空字符
    var arr = ['a','b',' '];
    var A=arr.filter(function(x){return x&&x.trim();})
    

    filter() 接收的回调函数,可以有多个参数,第一个参数表示元素,第二个表示元素位置,第三个表示数组本身

    //利用filter()巧妙去重
    var arr,A;
    A = filter(function(element,index,self)
    {
        return self.indexOf(element)===index;
    }
    )
    

    sort

    排序算法
    很傻逼的排序

    ['A','C','B'].sort();             ['A','B','C']
    ['a','C','B'].sort();             ['B','C','a']
    [1,2,10,20].sort();               [1,10,2,20]
    

    结果这么奇怪的原因是,Javascript的sort()对数字数组进行排序时,会先将其转换为String再排序

    相关文章

      网友评论

          本文标题:JS函数专题

          本文链接:https://www.haomeiwen.com/subject/lgbihqtx.html