// 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命令可以间接调用函数