先来个each()函数:
var each=function(array,fn){
for(var index in array){
//遍历array,fn这个函数未确定
}
}
*假如我们需要定义一个形如each(array,fn)的函数,这个函数可以自动迭代array数级元素,而fn函数则负责对数组元素进行处理--此时需要在each函数中调用fn函数,但目前fn函数并未确定,因此无法采用直接调用的方式来调用fn函数,这时就需要用:
1 call()方法调用函数;
1.1 完善each,代码如下
var each=function(array,fn){
for(var index in array){
fn.call(null,index,array[index]);
}
}
each([14,20,3],function(index,ele){
document.write("第"+index+"个元素是:"+ele+"<br />");
});
1.2 语法解析:函数引用.call(调用者,参数1,参数2....);
2 以apply()方法调用函数与call()方法类似,区别在于:
>>通过call()调用函数时,必须在括号中详细地列出每个参数
>>通过apply()动态地调用参数时,可以在括号中以arguments来代表所有参数
代码如下:
2.1 var myfun=function(a,b){
alert("a的值是:"+a+"\nb的值是:"+b);
}
myfun.call(window,12,23);
var example=function(num1,num2){
myfun.apply(this.arguments);
}
example=(20,40);
myfun.apply(window,[12,23]);
2.2 语法解析:函数引用.apply(调用者,arguments);
对比上面代码:
当通过call()动态地调用方法时,需要为被调用方法逐个地传入参数;
当通过apply()动态地调用方法时,能以arguments一次性地传入多个参数
需要指出的是:arguments可代表调用当前函数时传入的所有参数,因此arguments相当于一个数组