[whatwg] Scripting Tweaks

Brad Fults bfults at gmail.com
Wed Apr 20 10:42:45 PDT 2005


On 4/20/05, Dean Edwards <dean at edwards.name> wrote:
> Ian Hickson wrote:
> > On Wed, 20 Apr 2005, Dean Edwards wrote:
> > I beg to differ:
> >
> >    elem[i].disabled = true;
> >    setTimeout(function () { elem[i].disabled = false }, 1);
> >
> > That looks a lot easier than the eval() to me. And shorter. And it will
> > have syntax errors caught at compile time.
> >
> 
> Yes, but as I said initially, that creates a closure. This is not always
> the most efficient solution. Your code won't work anyway because "i" is
> variable. The closure would need to be more complicated to work properly.

Talking about eval() and "efficient" should set off sirens in any JS
developer's mind. Using eval() requires re-compilation of the code at
runtime and is very rarely ever a real solution.

In addition, the proper argument to the setTimeout() function is a
function reference, not a string. If you have a basic understanding of
closures, they're not all that scary. Observe:

function fnMakeEnabled(oEl)
{
  return function() { oEl.disabled = false; };
}
...
for (...)
{
  elem[i].disabled = true;
  setTimeout(fnMakeEnabled(elem[i]), 1);
}

-- 
Brad Fults
NeatBox



More information about the whatwg mailing list