JavaScript variable scoping trickery

I almost fell victim to this over the weekend, so thought I’d share a common JavaScript gotcha. What does the following line do?

var start = stop = null;

Most people will respond, “define a variable called start and a variable called stop and then set them both to null.” That is generally correct, but not specific enough. What actually happens is that a local variable called start is defined and a global variable named stop is defined; both are then set to null. The var operator applies to start, not to stop because stop is part of the initialization (to the right of the equals sign). This code can be rewritten to create two local variables like this:

var start = null, stop = null;

Now, the var operator applies to both start and stop, creating two local variables (the comma indicates another variable being defined). It’s little things like this that make me love JavaScript.