<!DOCTYPE html> <html> <head> <title>分布函数</title> <script type="text/javascript"> Function.prototype.partial = function() { var fn = this,//存储当前方法。即setTimeout args = Array.prototype.slice.call(arguments);//用传入的实参使用call方法调用Array对象原型上的slice方法对传入转换为数组 //这里采用了闭包的方法,闭包内保存了fn 和args值。 return function() {//在调用函数原型链上的partial方法时返回这个匿名方法 var arg = 0;//定义并赋值为0, for (var i = 0; i < args.length && arg < arguments.length; i++) {//循环调用partial方法时传入的参入 if (args[i] === undefined) {//如果又一个参数为undefined args[i] = arguments[arg++];//将我们调用setTimeout时的参数进行替换 } } return fn.apply(this, args);//this(即window)对象使用applay方法调用之前存储的方法,并传入参数数组args。 } } window.onload = function() { var delay = setTimeout.partial(undefined, 1000); delay(function() { alert('a'); }) } </script> </head> <body> </body> </html>