97 lines
2.7 KiB
HTML
97 lines
2.7 KiB
HTML
<p>This page tests function.caller and function.arguments in interesting nested scopes.
|
|
</p>
|
|
<p>If the test passes, you'll see a series of PASS messages below.
|
|
</p>
|
|
<pre id="console"></pre>
|
|
|
|
<script>
|
|
function log(s)
|
|
{
|
|
document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
|
|
}
|
|
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
function f() { return this.eval('f.arguments instanceof Object ? "PASS" : "FAIL"'); }
|
|
|
|
var resultArray = [
|
|
// ----- arguments -----
|
|
|
|
// function scope inside global eval scope, uncalled function
|
|
(function g() { return this.eval('f.arguments instanceof Object ? "FAIL" : "PASS"'); })(),
|
|
|
|
// function scope inside local eval scope, uncalled function
|
|
(function g() { return eval('f.arguments instanceof Object ? "FAIL" : "PASS"'); })(),
|
|
|
|
// global eval scope, called function
|
|
f(),
|
|
|
|
// local eval scope, called function
|
|
(function f() { return eval('f.arguments instanceof Object ? "PASS" : "FAIL"'); })(),
|
|
|
|
// eval scope, uncalled function
|
|
eval('(function () { }).arguments instanceof Object ? "FAIL" : "PASS"'),
|
|
|
|
// re-entrant function scope, outer called function
|
|
(function f() {
|
|
return String({ toString: function g() { return f.arguments instanceof Object ? "PASS" : "FAIL"; } });
|
|
})(),
|
|
|
|
// re-entrant function scope, inner called function
|
|
(function f() {
|
|
return String({ toString: function g() { return g.arguments instanceof Object ? "PASS" : "FAIL"; } });
|
|
})(),
|
|
|
|
// function scope, outer called function
|
|
(function f() {
|
|
return (function g() {
|
|
return f.arguments instanceof Object ? "PASS" : "FAIL";
|
|
})();
|
|
})(),
|
|
|
|
// function scope, inner called function
|
|
(function f() {
|
|
return (function g() {
|
|
return g.arguments instanceof Object ? "PASS" : "FAIL";
|
|
})();
|
|
})(),
|
|
|
|
// function scope, uncalled function
|
|
(function f() {
|
|
return (function g() { }).arguments instanceof Object ? "FAIL" : "PASS";
|
|
})(),
|
|
|
|
// global scope, uncalled function
|
|
(function () { }).arguments instanceof Object ? "FAIL" : "PASS",
|
|
|
|
// ----- caller -----
|
|
|
|
(function f() {
|
|
return (function g() {
|
|
return g.caller instanceof Object ? "PASS" : "FAIL";
|
|
})();
|
|
})(),
|
|
|
|
(function f() { return f.caller instanceof Object ? "FAIL" : "PASS"; })(),
|
|
|
|
(function () { }).caller instanceof Object ? "FAIL" : "PASS",
|
|
|
|
eval('(function f() { return f.caller instanceof Object ? "FAIL" : "PASS"; })()'),
|
|
|
|
(function f() {
|
|
return String({ toString: function g() { return g.caller instanceof Object ? "FAIL" : "PASS"; } });
|
|
})(),
|
|
|
|
(function f() {
|
|
function g() { return h.apply(this); }
|
|
function h() { return k(); }
|
|
function k() { return k.caller instanceof Object ? "PASS" : "FAIL"; }
|
|
|
|
return g();
|
|
})()
|
|
];
|
|
|
|
log(resultArray);
|
|
</script>
|