为什么把我的JavaScript库包装在一个匿名函数中来修复我的竞争条件?
Why did wrapping my JavaScript library in an anonymous function fix my race condition?
问题:为什么包装我的JavaScript库在一个匿名函数修复我的竞争条件?
注意:我也对同步和异步加载外部JavaScript资源的好解决方案的评论感兴趣。
我正在做一个项目,涉及使用crossrider编写浏览器扩展。如果你不熟悉在JavaScript中实现的跨骑扩展,你有一个可以与应用程序页面通信的背景页面。应用程序页面可以在每个打开的选项卡上运行,并且可以操作DOM。我计划在用户请求打开时远程加载大部分扩展代码。最近,当我在引用Raphael的页面上添加一个脚本标签时,我遇到了一个竞争条件,然后我用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]));
})()
}
关于你的问题,我不认为<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'
});
});
相关文章:
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 使用JAVASCRIPT转换货币.可以't通过我的函数设置转换后的输入文本字段的值
- 为什么我的函数没有被调用呢
- 为什么我的函数没有返回准确的计数
- 我的函数返回“未定义”
- 用我的函数jquery给出数据/参数
- 从未达到我的函数调用-ReactJs 0.12.0
- 我的函数不会返回要保存在数组中的对象
- 为什么点击或更改事件都没有触发我的函数
- 为什么如果我的函数中的范围被 javascript 解释器完全忽略了
- 我的函数调用在回显中不起作用
- 我的函数返回空.为什么
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- 如何在我的函数中使用 .bind()
- 在jQuery中,我的函数不起作用
- 为什么不是'我的函数未按预期在文档加载时运行
- 传递的变量不适用于我的函数-Javascript
- jQuery:我的函数需要一个反垃圾邮件
- 为什么不是't调用我的函数
- 为什么我的函数参数说是未定义的