Skip to content

Instantly share code, notes, and snippets.

@remy
Created April 8, 2010 14:24
Show Gist options
  • Select an option

  • Save remy/360113 to your computer and use it in GitHub Desktop.

Select an option

Save remy/360113 to your computer and use it in GitHub Desktop.
setInterval run once, then keep running
setInterval((function () {
console.log(new Date()); // run some arbitrary code
return arguments.callee; // here be the magic
})(), 1000);
// ^---- and that runs the function, and the return val is assign to the interval
@jonraasch

Copy link
Copy Markdown

Awesome, I've always wondered if that was possible.

@paulirish

Copy link
Copy Markdown

an ecmascript5 strict mode safe version, without arguments.callee:

setInterval((function fn() {
    console.log(new Date()); // run some arbitrary code
    return fn;               // here be the magic
})(), 1000);
// ^---- and that runs the function, and the return val is assign to the interval

@remy

remy commented Apr 8, 2010

Copy link
Copy Markdown
Author

Yeah, it should be noted that, as per Paul's comment - es5 doesn't support arguements.callee - in fact, I think Paul's is cleaner code since you've got a named function to help with debugging and performance.

@cowboy

cowboy commented Apr 8, 2010

Copy link
Copy Markdown

I have a gist fork of this one with some setInterval and setTimeout patterns in it.

@getify

getify commented Apr 8, 2010

Copy link
Copy Markdown

isn't this going to create memory leaks in IE with the named function expression?

@rakeshpai

Copy link
Copy Markdown

How does a named function help with performance?

Also, I prefer the arguments approach better, since it's very useful when creating, say, a library. If I pass the arguments object to the library, the lib has got context of both caller and callee with a simple API. In ES5, the API would get complicated. This has been my biggest gripe with ES5.

@paulirish

Copy link
Copy Markdown

Accessing the arguments object is very slow.
http://www.jspatterns.com/arguments-considered-harmful/
http://webreflection.blogspot.com/2010/02/arguments-callee-call-and-apply.html

@getify, i'm aware of the NFE scope leaking bugs in IE, but not any memory leaks..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment