From: jeresig <jeresig@gmail.com>
Date: Wed, 16 Dec 2009 21:45:00 +0000 (-0500)
Subject: Retooled the arguments.callee-related changes in 98ce35d52b17a033822f31d8a36232222d0d... 
X-Git-Url: http://git.asbjorn.biz/?a=commitdiff_plain;h=9997620420ec0baf7dba8ce9dee0f19e616e1bc4;p=jquery.git

Retooled the arguments.callee-related changes in 98ce35d52b17a033822f31d8a36232222d0d365e to avoid re-declarations where possible.
---

diff --git a/src/core.js b/src/core.js
index 7be1512..0d5588c 100644
--- a/src/core.js
+++ b/src/core.js
@@ -41,6 +41,9 @@ var jQuery = function( selector, context ) {
 	// The functions to execute on DOM ready
 	readyList = [],
 
+	// The ready event handler
+	DOMContentLoaded,
+
 	// Save a reference to some core methods
 	toString = Object.prototype.toString,
 	hasOwnProperty = Object.prototype.hasOwnProperty,
@@ -347,6 +350,7 @@ jQuery.extend({
 	ready: function() {
 		// Make sure that the DOM is not already loaded
 		if ( !jQuery.isReady ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
 			if ( !document.body ) {
 				return setTimeout( jQuery.ready, 13 );
 			}
@@ -386,10 +390,7 @@ jQuery.extend({
 		// Mozilla, Opera and webkit nightlies currently support this event
 		if ( document.addEventListener ) {
 			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", function DOMContentLoaded() {
-				document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-				jQuery.ready();
-			}, false );
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
 			
 			// A fallback to window.onload, that will always work
 			window.addEventListener( "load", jQuery.ready, false );
@@ -398,13 +399,7 @@ jQuery.extend({
 		} else if ( document.attachEvent ) {
 			// ensure firing before onload,
 			// maybe late but safe also for iframes
-			document.attachEvent("onreadystatechange", function onreadystatechange() {
-				// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-				if ( document.readyState === "complete" ) {
-					document.detachEvent( "onreadystatechange", onreadystatechange );
-					jQuery.ready();
-				}
-			});
+			document.attachEvent("onreadystatechange", DOMContentLoaded);
 			
 			// A fallback to window.onload, that will always work
 			window.attachEvent( "onload", jQuery.ready );
@@ -419,24 +414,6 @@ jQuery.extend({
 
 			if ( document.documentElement.doScroll && toplevel ) {
 				doScrollCheck();
-
-				function doScrollCheck() {
-					if ( jQuery.isReady ) {
-						return;
-					}
-
-					try {
-						// If IE is used, use the trick by Diego Perini
-						// http://javascript.nwbox.com/IEContentLoaded/
-						document.documentElement.doScroll("left");
-					} catch( error ) {
-						setTimeout( doScrollCheck, 1 );
-						return;
-					}
-
-					// and execute any waiting functions
-					jQuery.ready();
-				}
 			}
 		}
 	},
@@ -653,6 +630,48 @@ if ( indexOf ) {
 // All jQuery objects should point back to these
 rootjQuery = jQuery(document);
 
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch( error ) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+if ( indexOf ) {
+	jQuery.inArray = function( elem, array ) {
+		return indexOf.call( array, elem );
+	};
+}
+
 function evalScript( i, elem ) {
 	if ( elem.src ) {
 		jQuery.ajax({
diff --git a/src/event.js b/src/event.js
index 283d1e0..b50a1ec 100644
--- a/src/event.js
+++ b/src/event.js
@@ -37,13 +37,20 @@ jQuery.event = {
 
 		// Init the element's event structure
 		var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),
-			handle = jQuery.data( elem, "handle" ) || jQuery.data( elem, "handle", function eventHandle() {
+			handle = jQuery.data( elem, "handle" ), eventHandle;
+
+		if ( !handle ) {
+			eventHandle = function() {
 				// Handle the second event of a trigger and when
 				// an event is called after a page has unloaded
 				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
 					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
 					undefined;
-			});
+			};
+
+			handle = jQuery.data( elem, "handle", eventHandle );
+		}
+
 		// Add elem as a property of the handle function
 		// This is to prevent a memory leak with non-native
 		// event in IE.