<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>