function repeat(fn, times, delay) { return function() { if(times-- > 0) { fn.apply(null, arguments) var args = Array.prototype.slice.call(arguments)
alert(arguments.callee) var self = arguments.callee setTimeout(function(){self.apply(null,args)}, delay) } } } function comms(s) { alert(s) } var somethingWrong = repeat(comms, 3, 2000); somethingWrong("Can you hear me, major tom?")
arguments.callee指向正在执行的函数。请问var self = arguments.callee为什么self会等于function(),前一句alert(arguments.callee)输出的是整个repeat函数代码?不是很理解正在执行函数的意思,往指导!
问题似乎没有描述清楚。
主要在于理解正在执行的函数,在执行repeat函数的时候,其代码只有一个return语句,returne的是一个匿名函数。注意这里只是返回匿名函数的引用,而并没有执行该匿名函数。匿名函数被赋值给somethingWrong变量。然后执行somethingWrong函数,也就是执行匿名函数,这时候arguments.callee当然指向的是匿名函数了。
谢谢啦,我已经理解啦。每个函数都有一个arguments,callee是它的一种属性。如果我有其他函数的arguments,我也可以arguments.callee执行其他函数。