Create a gist now

Instantly share code, notes, and snippets.

A JavaScript "eval is evil" narrative by way of the "pass a string to setTimeout" anti-pattern...
// An object with a property and a method.
var obj = {
name: "Ben",
logName: function() {
// And another global variable, for good measure.
var name = "Whoops";
// Even though this works great...
obj.logName(); // logs "Ben"
// This doesn't, because of how JavaScript determines the "this" value...
setTimeout(obj.logName, 1000); // logs "Whoops" in one second.
// Someone who doesn't really understand JavaScript might fall back on eval...
setTimeout("obj.logName();", 1000); // logs "Ben" in one second.
// When they should instead be either doing this...
setTimeout(function() {
}, 1000); // logs "Ben" in one second.
// Or, in environments that support ES5, this.
setTimeout(obj.logName.bind(obj), 1000); // logs "Ben" in one second.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment