函数调用的方式

      // 1.0 一般形式的函数调用
        // 在默认情况下,函数是不会执行的,使用小括号可以激活并执行函数,
        // 可以传递零个或多个参数,参数之间通过逗号分隔
        // 示例1:
        function f(x,y) {  //定义函数
            return x * y;  //返回值
        }
        console.log(f(f(5,6), f(7,8)));  //返回1680。重复调用函数
        // 示例2:
        function f1(x,y) {  //定义函数
            return function () {  //返回函数类型的数据
                return x * y;
            }
        }
        console.log(f1(7,8) ());  //返回56,反复调用函数

        // 2.0作为对象的方法调用
        // 当一个函数被设置为函数的属性值时,称之为方法。使用点语法可以调用一个方法
        var obj = {
            value : 0,
            increment : function (inc) {   
                this.value += typeof inc === 'number' ? inc :1; //在increment方法中可以使用this访问obj这个对象
            }
        }
        obj.increment();//使用点语法可以调用对象obj的方法
        console.log(obj.value);  //1
        obj.increment(2);
        console.log(obj.value);  //2


        // 3.0使用call和apply动态调用
        // call和apply是Function的原型方法,它们能够将特定函数当做一个方法绑定到指定对象上,并进行调用
            // 使用方法如下:
                // function.call(thisobj,args...)
                // function.apply(thisobj,[args])
                // function表示要调用的函数,
                // 参数thisobj表示绑定对象,即this指代的对象
                // 参数args表示要传递给被调用函数的参数
        function f2(x,y) {  //定义求和函数
            return x + y;
        }
        console.log(f2.call (null, 3, 4));  //返回7
        console.log(f2.apply(null, [3,4]));  //返回7

        // 示例1
        function max() {  //求最大值函数
            var m = Number.NEGATIVE_INFINITY;  //声明一个负无穷大的数值
            for (var i = 0; i < arguments.length; i ++) {  //遍历所有实参
                if (arguments[i] > m)  //如果实参值大于变量m
                m = arguments[i];  //则把该实参值赋值给m
            }
            return m;  //返回最大值
        }
        var a = [23,45,2,46,62,45,56,63];  //声明并初始化数组
        var m = max.apply(Object, a);  //动态调用max,绑定为Object的方法
        console.log(m);  //返回63

        // 示例2
        function f() {
            console.log("函数f");
        }
        var obj = {};
        f.call(obj);  //把函数f绑定为obj对象的方法
        console.log(obj.f());  //再次调用该方法,则返回编译错误

        // 4.0new命令间接调用
        // 使用new命令可以实例化对象,这是它的主要功能,但是在创建对象的过程中会激活并运行函数。
        // 因此使用new命令可以间接调用函数

 

posted on 2020-05-29 10:39  猪mother  阅读(275)  评论(0编辑  收藏  举报