TMB*_*TMB 5 javascript asynchronous anonymous-function race-condition
问题:为什么在匿名函数中包装我的JavaScript库会修复我的竞争条件?
注意:我也对同步和异步加载外部JavaScript资源的良好解决方案的评论感兴趣.
我正在开发一个涉及使用crossrider编写浏览器扩展的项目.如果您不熟悉跨骑手扩展,他们是用JavaScript实现的,那么您有一个可以与应用页面通信的后台页面.应用页面可以与每个打开的选项卡一起运行,并可以操作DOM.我计划在用户请求打开时远程加载大部分扩展代码.最近,当我向引用Raphael的页面添加脚本标签时,我遇到了竞争状态,然后我用graffle构建了一些东西
根据我的理解,如果页面加载了那些已经存在的脚本标签,那么执行将同步进行,但是因为我附加了脚本标签,所以执行是异步进行的.这是大多数人似乎面临的相反问题.搞乱它我学会了在匿名函数中包装我的代码graffle代码修复了我的竞争条件.为什么?我读过这篇关于在匿名函数中包装整个Javascript文件的帖子,这似乎与竞争条件没有任何关系.
我的通话代码:
var scriptsToLoad = [ "http://example/Scripts/lib/raphael.js",
"http://example/Scripts/lib/graffle.js",
"http://example/Scripts/lib/log4javascript.js"];
for(var i in scriptsToLoad) {
(function(){
$("head")
.append($("<script></script>")
.attr("type", "text/javascript")
.attr("src", scriptsToLoad[i]));
})()
}
Run Code Online (Sandbox Code Playgroud)
<script />关于你的问题,我不认为标签的加载和评估顺序有任何特定的标准;引入竞争条件很容易。
关于(a)同步脚本加载,使用 jQuery,执行以下操作:
var scriptsToLoad = [
"http://example/Scripts/lib/raphael.js",
"http://example/Scripts/lib/graffle.js",
"http://example/Scripts/lib/log4javascript.js"
];
$.each(scriptsToLoad, function (index, script) {
$.ajax({
url : script,
async : false,
dataType : 'script'
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |