正向我自己的滾動需要
它已經到了我的注意,這個問題是一個「函數的範圍, - 不阻塞作用域」的答案,不同之處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
我的想法是,「如果其中一個路徑沒有完成就返回」,這導致我假設「如果我們在這裏做出默認回調」 –