在项目中是否有过需要动态加载JS的时候
或者为了加快浏览器加载速度将某些JS异步加载
或者需要按照指定顺序异步加载JS文件
这些代码或许可以帮到你

/**
 * 名称:TmsDynamicLoadScriptQueue
 * 功能:动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题
 * 作者:翟一鸣 tinymins
 * 版本:2013-4-14 v1.0.2
 * 网站:WwW.ZhaiYiMing.CoM
 **/
var TmsDynamicLoadScriptQueue;
(function () { //动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题.AddTask(JsSrc:"",encoding:"gb2312"|"UTF-8", callback:function(LoadTime,status,src) {});
    'use strict';
    TmsDynamicLoadScriptQueue  = {
        Loading : false,
        TaskQueue : [],
        CallBack : function (StartTime, CallBackMethod, Status, JavascriptSrc) {
            CallBackMethod && CallBackMethod(new Date().valueOf() - StartTime.valueOf(), Status, JavascriptSrc);
            this.Loading = false;
            this.Load();
        },
        Load : function () {
            if (!this.Loading && this.TaskQueue.length) {
                var Head = document.getElementsByTagName("head")[0];
                if (!Head) {
                    this.TaskQueue.length = 0;
                    this.TaskQueue = null;
                    throw new Error('The head does not exist in this page.');
                }
                var TDLSQ = this, TaskQueue = this.TaskQueue.shift(), StartTime = new Date, Script = document.createElement('script');
                this.Loading = true;
                if (Script.readyState) { //IE
                    Script.onreadystatechange = function () { //加载成功时继续下一个。
                        if (Script && Script.readyState && Script.readyState != 'loaded' && Script.readyState != 'complete') return;
                        Script.onload = Script.onreadystatechange = Script.onerror = null;
                        Script.Src = '';
                        if(Script.parentNode!=null) {Script.parentNode.removeChild(Script);}
                        Script = null;
                        TDLSQ.CallBack(StartTime, TaskQueue.CallBackMethod, "success",TaskQueue.Src);
                        StartTime = TaskQueue = null;
                    };
                } else { //Others
                    Script.onload = function () { //加载成功时继续下一个。
                        if (Script && Script.readyState && Script.readyState != 'loaded' && Script.readyState != 'complete') return;
                        Script.onload = Script.onreadystatechange = Script.onerror = null;
                        Script.Src = '';
                        if(Script.parentNode!=null) {Script.parentNode.removeChild(Script);}
                        Script = null;
                        TDLSQ.CallBack(StartTime, TaskQueue.CallBackMethod, "success",TaskQueue.Src);
                        StartTime = TaskQueue = null;
                    };
                }
                Script.onerror = function () { //加载失败时跳过该JS,继续下一个。
                    Script.onload = Script.onreadystatechange = Script.onerror = null;
                    Script.Src = '';
                    if(Script.parentNode!=null) {Script.parentNode.removeChild(Script);}
                    Script = null;
                    TDLSQ.CallBack(StartTime, TaskQueue.CallBackMethod, "error",TaskQueue.Src);
                    StartTime = TaskQueue = null;
                }
                Script.charset = TaskQueue.Charset || 'gb2312';
                Script.src = TaskQueue.Src;
                Head.appendChild(Script);
            }
        },
        AddTask : function (Src, Charset, CallBackMethod) {
            this.TaskQueue.push({ 'Src' : Src, 'Charset' : Charset, 'CallBackMethod' : CallBackMethod });
            this.Load();
        }
    }
})();

使用方法

TmsDynamicLoadScriptQueue.AddTask("http://code.jquery.com/jquery-latest.js","UTF-8", function(LoadTime,status,src){
  if( status=="success" ) {
    alert('加载最新版Jquery成功。');
  } else {
    alert('库加载失败。');
  }
});