chromium/third_party/blink/web_tests/fast/js/nested-function-scope.html

<p>This page tests issues of scope with nested functions.</p>
<pre id="console"></pre>

<script>
function log(s)
{
    document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
}

function shouldBe(evalA, a, b)
{
    if (evalA === b) {
        log("PASS: " + a + " should be " + b + " and is.");
    } else {
        log("FAIL: " + a + " should be " + b + " but instead is " + evalA + ".");
    }
}

if (window.testRunner)
    testRunner.dumpAsText();

log("Before parsing f:");
log("-----");
shouldBe(typeof f, "typeof f", "function");
shouldBe(typeof f.f1, "typeof f.f1", "undefined");

function f(x)
{
    function f1() {
        log("\nIn call to f:");
        log("-----");
        shouldBe(typeof f, "typeof f", "function");
        shouldBe(typeof f1, "typeof f1", "function");
        shouldBe(typeof f.f1, "typeof f.f1", "undefined");
        shouldBe(typeof x, "typeof x", "number");
        shouldBe(typeof y, "typeof y", "undefined");
    }

    f1();
}
f.y = 1;

log("\nAfter parsing f, but before calling f:");
log("-----");
shouldBe(typeof f, "typeof f", "function");
shouldBe(typeof f.f1, "typeof f.f1", "undefined");

f(1);
</script>