arguments对象的高级用法
利用javascript函数的arguments对象,结合闭包的特性创建优雅的函数。
废话不多说,直接看例子:
定制执行次数和执行时间间隔的函数:
-
function repeat(fn, times, delay) {
-
return function() {
-
if(times-- > 0) {
-
fn.apply(null, arguments);
-
var args = Array.prototype.slice.call(arguments);
-
var self = arguments.callee;
-
setTimeout(function(){self.apply(null,args)}, delay);
-
}
-
};
-
}
-
function showMsg(s){
-
alert(s);
-
}
-
var someMsg = repeat(showMsg, 3, 2000); someMsg("hello jarry!");
将会每隔两秒钟弹出一个提示框,一共弹出三次,程序的关键在fn.apply(null, arguments);和var args = Array.prototype.slice.call(arguments);两行,这两行分别负责将hello jarry!参数传递给showMsg函数和保存当前参数,以便在setTimeout函数中能够访问到它们,这里利用的是函数的闭包特性。
匿名函数的递归:
-
(function (n, j){
-
j = j || 1;
-
return n == 0 ? j : arguments.callee(n-1, j*n);
-
})(6);//求6的阶乘
arguments.callee属性保存了当前被调用函数的引用,所以能够利用它实现匿名函数的调用。
创建预置参数的函数:
比如我们这样调用
-
function hello(s,m){
-
alert(s+m)
-
}
-
-
var hi = makeFunc(hello, "hello! ");
-
hi("jarry!");//“hello! jarry!”
-
hi("qf!");//“hello! qf!”
-
hi("ggk!");//“hello! ggk!”