正向我自己的滚动需要
它已经到了我的注意,这个问题是一个“函数的范围, - 不阻塞作用域”的答案,不同之处for ... in
反对for ... i<n ... i++
该解决方案可以包裹for(var p in ...) {
与一个给他们自己的范围的功能(很像Array.prototype.forEach
)。感谢您的帮助。
问题
我滚我自己的小Require.js的解决方案,而不是实际的Require.js库(不,我还没有采取一起来看看它们的源)。
我的回调函数似乎从未被执行,但我不明白为什么。这可能是一个简单的逻辑错误,但是当你长时间盯着你自己的代码时,你会知道它是如何发生的。 (一切看起来逻辑音)
使用
使用方法如下:
require(["LibraryA", "LibraryB", "LibraryC"], function() {
//code which requires libraries a-c here
});
代码
var require = (function() {
var scriptsLoaded = [];
return function(paths, callback) {
var pathsDoneLoading = {};
for(var i = 0; i < paths.length; i++) {
pathsDoneLoading[paths[i]] = false;
}
for(var p in pathsDoneLoading) {
for(var i = 0; i < scriptsLoaded.length; i++) {
if(p === scriptsLoaded[i]) {
pathsDoneLoading[p] = true;
}
}
}
for(var p in pathsDoneLoading) {
if(pathsDoneLoading[p] === false) {
var script = document.createElement("script");
script.src = p + ".js";
script.onload = function() {
scriptsLoaded.push(p);
pathsDoneLoading[p] = true;
for(var p in pathsDoneLoading) {
if(pathsDoneLoading[p] !== true) {
return;
}
}
callback();
};
document.documentElement.appendChild(script);
}
}
}
})();
Plunker
https://plnkr.co/edit/OFWTUpmV3sIJAjhGhcLO
在创建所有脚本元素后,不应该调用回调吗?现在看起来你想在每个脚本加载后调用它 –
你正在将'require'定义为一个自动执行的方法吗?考虑到放弃后面的'();' – Sean3z
我的想法是,“如果其中一个路径没有完成就返回”,这导致我假设“如果我们在这里做出默认回调” –