I found difference between JS engines in the way they handle code like
the following:

(function() {
  foo("m1a");
  function foo(m) { alert("f1: " + m); }
  foo("m1b");
  if (true) {
    foo("m2a");
    function foo(m) { alert("f2: " + m); }
    foo("m2b");
  }
  foo("m3a");
  function foo(m) { alert("f3: " + m); }
  foo("m3b");
})();

In Chrome, I get f3: m1a, f3: m1b, f3: m2a, f3: m2b, f3: m3a, f3: m3b
In FF 4, I get f3: m1a, f3: m1b, f3: m2a, f2: m2b, f2: m3a, f2: m3b

If I simplify this to:

(function() {
  foo("m1");
  if (true) {
    foo("m2a");
    function foo(m) { alert("f2: " + m); }
    foo("m2b");
  }
  foo("m3");
})();

I get the following result:

Chrome: f2: m1, f2: m2a, f2: m2b, f2: m3
FF4: foo is not defined

It looks like Chrome applies a very simple rule, which is to take the
last definition encountered in the scope (ignoring all {} which don't
really create a scope) while Firefox applies a more sophisticated
rule.

Is this behavior precisely defined by the ECMAScript standard, or is
it left open to interpretation?

Bruno

-- 
To view archived discussions from the original JSMentors Mailman list: 
http://www.mail-archive.com/[email protected]/

To search via a non-Google archive, visit here: 
http://www.mail-archive.com/[email protected]/

To unsubscribe from this group, send email to
[email protected]

Reply via email to