| <p>This tests verifies the scope of a function's name. |
| </p> |
| <pre id="console"></pre> |
| |
| <script> |
| function log(s) |
| { |
| document.getElementById("console").appendChild(document.createTextNode(s + "\n")); |
| } |
| |
| function shouldBe(a, aDescription, b) |
| { |
| if (a == b) { |
| log("PASS: " + aDescription + " should be " + b + " and is."); |
| return; |
| } |
| log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + "."); |
| } |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| } |
| |
| // Function declarations do not put the function's name in scope. |
| function f() |
| { |
| shouldBe( |
| f.name == 'f', |
| "f.name == 'f'", |
| true |
| ); |
| |
| f = 1; |
| shouldBe( |
| f == 1, |
| "f == 1", |
| true |
| ); |
| }; |
| |
| f(); |
| |
| // Function expressions do put the function's name in scope, as a read-only property. |
| var g = function g() |
| { |
| shouldBe( |
| g.name == 'g', |
| "g.name == 'g'", |
| true |
| ); |
| |
| g = 1; |
| shouldBe( |
| g == arguments.callee, |
| "g == arguments.callee", |
| true |
| ); |
| }; |
| |
| g(); |
| |
| </script> |