| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- function write(v) { WScript.Echo(v + ""); }
- // Change arguments inside eval
- function ArgInEval1() {
- var old = arguments;
- eval('arguments="test1"');
- write("old.length : " + old.length);
- write("arguments.length : " + arguments.length);
- write("Compare the two : " + (old === arguments));
- }
- ArgInEval1(10);
- function ArgInEval2() {
- var old = arguments;
- eval('write(arguments); var arguments = "test2"; write(arguments);');
- write("old.length : " + old.length);
- write("arguments.length : " + arguments.length);
- write("Compare the two : " + (old === arguments));
- }
- ArgInEval2(10);
- function sameNameFormal(x, x) {
- var x = 999;
- write(arguments[0]);
- write(arguments[1]);
- }
- sameNameFormal(1, 2);
- function bug1127540(a, b, c, d) {
- eval("function foo(){return arguments.caller;}");
- write("bug1127540: " + (foo() === arguments));
- }
- bug1127540(1, 2, 3, 4)
- function DelArgs(a) {
- write(arguments[0]);
- delete arguments[0];
- write(arguments[0]);
- arguments[0] = 2;
- write(arguments[0]);
- delete arguments[0];
- write(arguments[0]);
- }
- DelArgs(1);
- // Parent function doesn't use arguments. Modify function.arguments in child
- function Func1(a, b, c) {
- a = "assignToFormal";
- Func1.arguments[1] = "funcArgs[1]";
- Func1_Helper();
- write("Arguments : " + Func1.arguments[0] + " " + Func1.arguments[1] + " " + Func1.arguments[2]);
- write("Formals : " + a + " " + b + " " + c);
- }
- function Func1_Helper() {
- Func1.arguments[2] = "nested[2]";
- write("In Helper : " + Func1.arguments[0] + " " + Func1.arguments[1] + " " + Func1.arguments[2]);
- }
- Func1("arg1", "arg2", "arg3");
- // Parent function uses arguments. Modify function.arguments in child
- function Func2(a, b, c) {
- a = "assignToFormal";
- Func2.arguments[1] = "funcArgs[1]";
- arguments[2] = "arguments[2]";
- Func2_Helper();
- write("Arguments : " + Func2.arguments[0] + " " + Func2.arguments[1] + " " + Func2.arguments[2]);
- write("Formals : " + a + " " + b + " " + c);
- }
- function Func2_Helper() {
- Func2.arguments[2] = "nested[2]";
- write("In Helper : " + Func2.arguments[0] + " " + Func2.arguments[1] + " " + Func2.arguments[2]);
- }
- Func2("arg1", "arg2", "arg3");
- function argEscapes(x)
- {
- return arguments;
- }
- do
- {
- // Put this in a loop so we'll try to apply the scope-caching optimization.
- var argSave = argEscapes('First call');
- WScript.Echo(argSave[0]);
- var argSave2 = argEscapes('Second call');
- WScript.Echo(argSave[0]);
- WScript.Echo(argSave2[0]);
- }
- while(0);
- function argEscapesViaEval(x)
- {
- return eval('arguments');
- }
- do
- {
- // Put this in a loop so we'll try to apply the scope-caching optimization.
- var argSave = argEscapesViaEval('First call');
- WScript.Echo(argSave[0]);
- var argSave2 = argEscapesViaEval('Second call');
- WScript.Echo(argSave[0]);
- WScript.Echo(argSave2[0]);
- }
- while(0);
|