那里有几个问题。
首先,您不应该首先加载该文件,因此不应该通过尝试确定是否加载该文件来完成此项业务。
但是,如果你想这样做:
第一个实际的问题是,你总是这样:
blog = {};
...这意味着,如果有已经是一个全球blog
,你”重新清除它的价值并用一个空的对象替换它。如果要使用现有的全球价值或创建一个新的,做到这一点:
var blog = blog || {};
这似乎很奇怪,但由于反复var
声明的罚款(和不改变变量),将使用现有的价值,或者如果没有(或者它的价值是假的)它将创建一个新的并且用{}
对它进行初始化。
于是,线路
namesp.jsFile.firstLoad = false;
...查找一个名为上namesp
财产,并假定它不是null
或undefined
。它不查找使用参数值的属性。
要做到这一点,使用括号注释:
namesp[jsFile].firstLoad = false;
即使是这样,不过,你假定它不是null
或undefined
,但它可能是。你可能只是想:
namesp[jsFile] = false;
或者可能:
namesp[jsFile] = namesp[jsFile] ||{};
namesp[jsFile].firstLoad = false;
这就是说,它看起来非常奇怪使用blog.comments
跟踪是否JavaScript文件已加载。如果该文件可能已经被加载,只是这将做到这一点:
var fullCalendarLoaded;
if (fullCalendarLoaded) {
// It's already loaded
} else {
// It isn't, but it is now
fullCalendarLoaded = true;
// ...do your init...
}
或者,如果你有这几条,并想用一个单一的全球性吧:
var loadedScripts = loadedScripts || {};
if (loadedScripts.fullCalendar) {
// Already loaded
} else {
// Not loaded yet
loadedScripts.fullCalendar = true;
// ...do init...
}
或者,如果使用文件名是很重要的:
var loadedScripts = loadedScripts || {};
function firstLoad(filename) {
if (loadedScripts[filename[) {
return false;
}
// Not loaded yet, remember we've loaded it now
loadedScripts[filename] = true;
return true;
}
然后:
if (firstLoad("fullcalendar.js")) {
// First load, do init...
}