Senza usare un array globale non riesco.
Il seguente script è corretto, funziona bene, ma utilizza l'array globale "scripts".
Se mi sai dire come andrebbe scritta la funzione "findScript" senza l'uso di un array globale allora elimino "scripts".

codice:
/**
 * 
 * DESCRIPTION
 * 
 * This script allows you to load the JavaScript scripts, 
 * after checking that they are not already loaded.
 * 
 * ****************************************************************
 * 
 * EXAMPLE
 * 
 * loadScript('./script_1.js');
 * loadScript('./script_2.js','f2');
 * loadScripts(new Array('./script_3.js','./script_4.js'));
 * loadScripts(new Array('./script_5.js','./script_6.js'), 'f6');
 */

var scripts = new Array(); // array (list of script name)

/**
 * Initialize "scripts" array.
 */
$(document).ready(function() {
	$('head > script').each(function(index, elt) {
		scripts.push($(elt).attr("src"));
	});
});

/**
 * If it is not already loaded, load a javascript script.
 * If the "callback" parameter is defined, executes "callback" after the script is loaded.
 * 
 * @access	: public
 * @param	: [src] string (script name)
 * @param	: [callback] string (optional: function string)
 */
function loadScript(src, callback) {
	if(findScript(src)) {
		if(callback != undefined)
			eval(callback+'();');
	} else {
		scripts.push(src);
		$.getScript(src, function(data, textStatus) {		
			if(callback != undefined)
				eval(callback+'();');
		});
	}
}

/**
 * If it are not already loaded, load a list of javascript scripts.
 * If the parameter "callback" is defined, after all scripts have been loaded execute "callback".
 * 
 * @access	: public
 * @param	: [srcList] array (list of script name)
 * @param	: [callback] string (optional: function name)
 */
function loadScripts(srcList, callback) {
	loadRecursive(srcList, callback, 0);
}

/**
 * If it are not already loaded, load a list of javascript scripts.
 * If the parameter "callback" is defined, after all scripts have been loaded execute "callback".
 * 
 * @access	: private
 * @param	: [srcList] array (list of script name)
 * @param	: [callback] string (optional: function name)
 * @param	: [i] int (index of srcList)
 */
function loadRecursive(srcList, callback, i) {
	if(i == srcList.length) {
		if(callback != undefined)
			eval(callback+'();');
	} else {
		if(findScript(srcList[i])) {
			loadRecursive(srcList,callback, i+1);
		} else {
			scripts.push(srcList[i]);
			$.getScript(srcList[i], function(data, textStatus) {
				loadRecursive(srcList,callback, i+1);
			});
		}
	}
}

/**
 * Find a script in "scripts" global array.
 * 
 * @access	: private
 * @return	: bool
 * @param	: [src] string (script name)
 */
function findScript(src) {
	for(var i = 0; i < scripts.length; i++)
		if(scripts[i] == src)
			return true;
	return false;
}
html di test:
codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

	<title>test</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	
	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
	<script type="text/javascript" src="lazy_loader.js"></script>
	
</head>
<body>
	
	<script type="text/javascript">
		
		$(document).ready(function() {
			loadScript('./script_1.js');
			loadScript('./script_2.js','f2');
			loadScripts(new Array('./script_3.js','./script_4.js'));
			loadScripts(new Array('./script_5.js','./script_6.js'), 'f6');	
		});
		
	</script>
	
</body>
</html>
Tutti i file di test "script_N.js" contengono semplicemente:
codice:
alert("caricato");
function fN() { alert("fN"); }