<p>This page tests function declarations inside various block structures and control statements.</pre> <pre id="console"></pre> <script> if (window.testRunner) testRunner.dumpAsText(); function log(s) { document.getElementById("console").appendChild(document.createTextNode(s + "\n")); } function shouldBe(a, b) { var evalA; try { evalA = eval(a); } catch (e) { evalA = e; } if (evalA === b) { log("PASS: " + a + " should be " + b + " and is."); } else { log("FAIL: " + a + " should be " + b + " but instead is " + evalA + "."); } } function testDeclarations(title) { var functions = [ "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9" ]; log(title); log("-----"); for (var i = 0; i < functions.length; ++i) shouldBe("'" + functions[i] + "' in window", true); } testDeclarations("Before executing blocks containing function declarations: "); { function f1() {} } if (false) { function f2() {} } switch (true) { case true: { function f3() {} break; } case false: { function f4() {} break; } } for (var i = 0; i < 0; ++i) { function f5() {} } do { function f6() {} } while(0); while (0) { function f7() {} } for (var p in {}) { function f8() {} } with ({}) { function f9() {} } log(""); testDeclarations("After executing blocks containing function declarations: "); </script>