argumentsMisc.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. function write(v) { WScript.Echo(v + ""); }
  6. // Change arguments inside eval
  7. function ArgInEval1() {
  8. var old = arguments;
  9. eval('arguments="test1"');
  10. write("old.length : " + old.length);
  11. write("arguments.length : " + arguments.length);
  12. write("Compare the two : " + (old === arguments));
  13. }
  14. ArgInEval1(10);
  15. function ArgInEval2() {
  16. var old = arguments;
  17. eval('write(arguments); var arguments = "test2"; write(arguments);');
  18. write("old.length : " + old.length);
  19. write("arguments.length : " + arguments.length);
  20. write("Compare the two : " + (old === arguments));
  21. }
  22. ArgInEval2(10);
  23. function sameNameFormal(x, x) {
  24. var x = 999;
  25. write(arguments[0]);
  26. write(arguments[1]);
  27. }
  28. sameNameFormal(1, 2);
  29. function bug1127540(a, b, c, d) {
  30. eval("function foo(){return arguments.caller;}");
  31. write("bug1127540: " + (foo() === arguments));
  32. }
  33. bug1127540(1, 2, 3, 4)
  34. function DelArgs(a) {
  35. write(arguments[0]);
  36. delete arguments[0];
  37. write(arguments[0]);
  38. arguments[0] = 2;
  39. write(arguments[0]);
  40. delete arguments[0];
  41. write(arguments[0]);
  42. }
  43. DelArgs(1);
  44. // Parent function doesn't use arguments. Modify function.arguments in child
  45. function Func1(a, b, c) {
  46. a = "assignToFormal";
  47. Func1.arguments[1] = "funcArgs[1]";
  48. Func1_Helper();
  49. write("Arguments : " + Func1.arguments[0] + " " + Func1.arguments[1] + " " + Func1.arguments[2]);
  50. write("Formals : " + a + " " + b + " " + c);
  51. }
  52. function Func1_Helper() {
  53. Func1.arguments[2] = "nested[2]";
  54. write("In Helper : " + Func1.arguments[0] + " " + Func1.arguments[1] + " " + Func1.arguments[2]);
  55. }
  56. Func1("arg1", "arg2", "arg3");
  57. // Parent function uses arguments. Modify function.arguments in child
  58. function Func2(a, b, c) {
  59. a = "assignToFormal";
  60. Func2.arguments[1] = "funcArgs[1]";
  61. arguments[2] = "arguments[2]";
  62. Func2_Helper();
  63. write("Arguments : " + Func2.arguments[0] + " " + Func2.arguments[1] + " " + Func2.arguments[2]);
  64. write("Formals : " + a + " " + b + " " + c);
  65. }
  66. function Func2_Helper() {
  67. Func2.arguments[2] = "nested[2]";
  68. write("In Helper : " + Func2.arguments[0] + " " + Func2.arguments[1] + " " + Func2.arguments[2]);
  69. }
  70. Func2("arg1", "arg2", "arg3");
  71. function argEscapes(x)
  72. {
  73. return arguments;
  74. }
  75. do
  76. {
  77. // Put this in a loop so we'll try to apply the scope-caching optimization.
  78. var argSave = argEscapes('First call');
  79. WScript.Echo(argSave[0]);
  80. var argSave2 = argEscapes('Second call');
  81. WScript.Echo(argSave[0]);
  82. WScript.Echo(argSave2[0]);
  83. }
  84. while(0);
  85. function argEscapesViaEval(x)
  86. {
  87. return eval('arguments');
  88. }
  89. do
  90. {
  91. // Put this in a loop so we'll try to apply the scope-caching optimization.
  92. var argSave = argEscapesViaEval('First call');
  93. WScript.Echo(argSave[0]);
  94. var argSave2 = argEscapesViaEval('Second call');
  95. WScript.Echo(argSave[0]);
  96. WScript.Echo(argSave2[0]);
  97. }
  98. while(0);