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