美文网首页
JS:day11

JS:day11

作者: AnnQi | 来源:发表于2017-08-14 19:16 被阅读0次

    一、函数

    1.声明还是表达式

    <script>
        //1、函数声明
        function a(num1,num2){
            return num1 + num2;
        }
    
    //    2、函数表达式
        var b = function (num1,num2){
            return num1 + num2;
        };
    
    //    先定义,再使用
    </script>
    

    2.函数就是值

    <script>
    //    function sayHi(){
    //        console.log("Hi!");
    //    }
    //    sayHi();
    //    var sayHi2 = sayHi;
    //    sayHi2();
    
    //  sort() 是将对象转化成字符串然后进行比较
        var num = [1,5,8,4,7,10,2,6];
        num.sort(function(first,second){
            return first - second;
        });
        console.log(num);
    
        num.sort();
        console.log(num);
    </script>
    
    数组排序的封装函数
    GLOBAL.namespace("Array");
    
    GLOBAL.Array.arraySort=function(arr){
      arr.sort(function(a,b){
          return a-b;
      })
    };
    

    3.参数

    arguments 是一个类似于数组的对象,其本质并不是对象。
    arguments 对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。

    <script>
    //    function aa(value){
    //        return value;
    //    }
    //    aa = function(){
    //        return arguments[0];
    //    };
    //    console.log(aa("Hi!"));
    //    console.log(aa("Hi!",25));
    //    console.log(aa.length);
    
        function sum(){
            var result = 0,
                    i = 0,
                    len = arguments.length;
            while(i<len){
                result += arguments[i];
                i++;
            }
            return result;
        }
    
        console.log(sum(1,2));    // 3
        console.log(sum(3,4,5,6));      //18
        console.log(sum(50));       // 50
        console.log(sum());       //0
    </script>
    

    sun()函数接受任意数量的参数并在while循环中遍历它们的值来求和。

    4.重载

    本质:让一个函数可以接收一个字符串的签名和接收两个参数的签名

    <script>
    
        function eat(){
            var len = arguments.length;
            switch (len){
                case 0:
                    console.log("默认");
                    break;
                case 1:
                    console.log(arguments[0]);
                    break;
                case 2:
                    console.log(arguments[0]+arguments[1]);
                    break;
    
            }
        }
       eat(1);
       eat(2,3) ;
    </script>
    

    5.对象方法(this)

    ①this对象(3种)

    1.函数直接调用,this指向window

    <script>
        /*this*/
        function say(){
            console.log(this.name);
        }
        var name="jake";
        /*函数直接调用,this指向window*/
        say();
    
    </script>
    

    2.在事件中,this指向执行事件的对象

    <script>
        var test = document.getElementById("test");
        /*在事件中,this指向执行事件的对象*/
        test.onclick=function(){
            this.style.background="pink"
        }
    </script>
    

    3.在函数中,this指向执行事件的函数

    ②改变this(3种)

    1.call() 方法

        function sayNameForAll(lable){
            console.log(lable + ":" + this.name);
        }
        var a = {
            name:"anan"
        };
        var b = {
            name:"anqi"
        };
    
    
    //     call 方法
          sayNameForAll.call(this,"golbal");
          sayNameForAll.call(a,"a");
          sayNameForAll.call(b,"b");
    

    2.apply() 方法(数组方法)

    //    apply 方法
         sayNameForAll.apply(this,["global"]);
         sayNameForAll.apply(a,["a"]);
         sayNameForAll.apply(b,["b"]);
    

    3.bind() 方法(函数方法)

    //    bind() 方法
        var sayNameFora1 = sayNameForAll.bind(a);
        sayNameFora1("a");
    
        var sayNameForb1 = sayNameForAll.bind(b,"b");
        sayNameForb1();
    
        b.sayName = sayNameFora1;
        b.sayName("b");
    

    相关文章

      网友评论

          本文标题:JS:day11

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