有几个问题。
首先,您一开始不应该多次加载文件,因此没有必要去尝试确定您是否已加载文件。
但如果你想这样做:
第一个实际问题是你总是这样做:
blog = {};
...这意味着如果已经有一个 blog 全局变量,那么您将清除它的值并用一个空对象替换它。如果您想使用现有全局值或创建一个新值,请执行以下操作:
var blog = blog || {};
这看起来很奇怪,但是由于重复的 var 声明很好(并且不要更改变量),这将使用现有的值,或者如果没有(或它的值是假的)它会创建一个新的并用{}初始化它。
然后,一行
namesp.jsFile.firstLoad = false;
...在namesp 上查找名为jsFile 的属性,并假定它不是null 或undefined。它不会使用 jsFile 参数的值查找属性。
为此,请使用括号表示法:
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...
}