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