arguments.caller
or arguments.callee
should not be used JS-00533190 // Cloning a node shouldn't copy over any
3191 // bound event handlers (IE does this)
3192 jQuery.support.noCloneEvent = false;
3193 div.detachEvent("onclick", arguments.callee);3194 });
3195 div.cloneNode(true).fireEvent("onclick");
3196 }
3077 // http://javascript.nwbox.com/IEContentLoaded/
3078 document.documentElement.doScroll("left");
3079 } catch( error ) {
3080 setTimeout( arguments.callee, 0 );3081 return;
3082 }
3083
3062 // maybe late but safe also for iframes
3063 document.attachEvent("onreadystatechange", function(){
3064 if ( document.readyState === "complete" ) {
3065 document.detachEvent( "onreadystatechange", arguments.callee );3066 jQuery.ready();
3067 }
3068 });
3052 if ( document.addEventListener ) {
3053 // Use the handy event callback
3054 document.addEventListener( "DOMContentLoaded", function(){
3055 document.removeEventListener( "DOMContentLoaded", arguments.callee, false );3056 jQuery.ready();
3057 }, false );
3058
2465 // Handle the second event of a trigger and when
2466 // an event is called after a page has unloaded
2467 return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
2468 jQuery.event.handle.apply(arguments.callee.elem, arguments) :2469 undefined;
2470 });
2471 // Add elem as a property of the handle function
The use of arguments.caller
and arguments.callee
make several code optimizations impossible.
They have been deprecated in future versions of JavaScript and their use is forbidden in ECMAScript 5 while in strict mode.
function foo(n) {
if (n <= 0) {
return;
}
arguments.callee(n - 1);
}
[1,2,3,4,5].map(function(n) {
return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
});
function foo(n) {
if (n <= 0) {
return;
}
foo(n - 1);
}
[1,2,3,4,5].map(function factorial(n) {
return !(n > 1) ? 1 : factorial(n - 1) * n;
});