63 lines
944 B
HTML
63 lines
944 B
HTML
<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>
|