BHSPitMonkey
BHSPitMonkey

Reputation: 655

Does using var in a tight JavaScript loop increase memory-related overhead?

For example, would this:

while (true) {
    var random = Math.random();
}

... be less efficient than the following, in most implementations?

var random;
while (true) {
    random = Math.random();
}

Thanks for your input.

Edit: In case it wasn't obvious, I'm mostly worried about lots of repeated (de)allocations occurring in this example.

Upvotes: 6

Views: 1003

Answers (5)

duncan
duncan

Reputation: 31912

Douglas Crockford recommends putting all the var assignments at the top of a function, i.e. outwith any loops.

Upvotes: 0

alex
alex

Reputation: 490183

JavaScript doesn't have block scope, and random's declaration would be hoisted to the top of its scope anyway (variable object).

Upvotes: 1

Matt Ball
Matt Ball

Reputation: 359786

JavaScript does not have block scoping.

In the first example, the var text declaration is hoisted out of the while block. In both cases, the variable is declared only once. In both cases, the variable is assigned a value once per iteration of the while loop.

var

  • function-scoped
  • hoist to the top of its function
  • redeclarations of the same name in the same scope are no-ops

Upvotes: 8

Matt Molnar
Matt Molnar

Reputation: 2542

No, variables are initiated upon entry into the scope, so random exists before the var statement is even reached.

Upvotes: 1

Tim Ebenezer
Tim Ebenezer

Reputation: 2724

This depends on the implementation of the interpreter. Strictly speaking, yes, it may have a slightly higher overhead; but depending on the GC mechanism this should be cleared reasonably quickly too.

Upvotes: 0

Related Questions