// An unmapped arguments object is created for strict functions or functions
// with default/rest/destructuring args.
load(libdir + "asserts.js" );
function testDefaults(a, b=3 ) {
a = 3 ;
b = 4 ;
assertEq(arguments.length, 1 );
assertEq(arguments[0 ], 1 );
assertEq(arguments[1 ], undefined);
arguments[0 ] = 5 ;
assertEq(a, 3 );
assertThrowsInstanceOf(() => arguments.callee, TypeError);
}
testDefaults(1 );
function testRest(a, ...rest) {
a = 3 ;
assertEq(arguments.length, 3 );
assertEq(arguments[0 ], 1 );
assertEq(arguments[1 ], 2 );
arguments[0 ] = 5 ;
assertEq(a, 3 );
arguments[1 ] = 6 ;
assertEq(arguments[1 ], 6 );
assertEq(rest.toString(), "2,3" );
assertThrowsInstanceOf(() => arguments.callee, TypeError);
}
testRest(1 , 2 , 3 );
function testDestructuring(a, {foo, bar}, b) {
a = 3 ;
bar = 4 ;
b = 1 ;
assertEq(arguments.length, 3 );
assertEq(arguments[0 ], 1 );
assertEq(arguments[1 ].bar, 2 );
assertEq(arguments[2 ], 9 );
assertThrowsInstanceOf(() => arguments.callee, TypeError);
}
testDestructuring(1 , {foo: 1 , bar: 2 }, 9 );
function testStrict(a) {
"use strict" ;
a = 3 ;
assertEq(arguments[0 ], 1 );
arguments[0 ] = 8 ;
assertEq(a, 3 );
assertThrowsInstanceOf(() => arguments.callee, TypeError);
}
testStrict(1 , 2 );
function testMapped(a) {
a = 3 ;
assertEq(arguments[0 ], 3 );
arguments[0 ] = 5 ;
assertEq(a, 5 );
assertEq(arguments.callee, testMapped);
}
testMapped(1 );
Messung V0.5 in Prozent C=96 H=94 G=94
¤ Dauer der Verarbeitung: 0.1 Sekunden
¤
*© Formatika GbR, Deutschland