funcall.js (930B)
1 function test1() { 2 var f = function() { return 1; }; 3 4 for (var i=0; i<25; i++) { 5 f.call(); 6 if (i > 20) 7 f = Math.abs; 8 } 9 } 10 test1(); 11 12 var origCall = Function.prototype.call; 13 14 function test2() { 15 var f = function() { return 1; }; 16 var c = 0; 17 for (var i=0; i<25; i++) { 18 f.call(); 19 if (i > 20) 20 Function.prototype.call = function() { c++; }; 21 } 22 assertEq(c, 3); 23 } 24 test2(); 25 Function.prototype.call = origCall; 26 27 function test3() { 28 var f = function() { return 1; }; 29 for (var i=0; i<25; i++) { 30 f.call(); 31 if (i > 20) 32 Function.prototype.call = undefined; 33 } 34 } 35 try { 36 test3(); 37 assertEq(0, 1); 38 } catch(e) {} 39 40 Function.prototype.call = origCall; 41 42 function test4() { 43 var f = function(a, b, c) { 44 assertEq(arguments.length, 1); 45 assertEq(a, 1); 46 assertEq(b, undefined); 47 assertEq(c, undefined); 48 return 1; 49 }; 50 for (var i=0; i<25; i++) { 51 f.call(null, 1); 52 } 53 } 54 test4();