我正在编写一些执行普通ajax调用的jQuery代码。我有一个全局Javascript变量,我需要在每次调用时增加线程安全。如果这是Java,我会使用synchronized
,但事实并非如此: - )
以下是代码段:
var myval;
function myFunc()
{
$.ajax({
url: myurl,
type: 'GET',
data: { ...my data... },
success: function()
{
myval++;
}
});
}
鉴于myFunc()
与点击事件相关联,我如何确保myvar
始终安全/持续增加?我知道我可能使用async: false
,但我宁愿避免使用它。我甚至不确定它是否会这样。
感谢您的帮助!
答案 0 :(得分:3)
没有问题 - JS没有原子性问题,因为没有(用户可见的)线程[*]
除了响应事件或初始脚本加载之外, 在JS中没有发生任何。一段代码在增量期间不可能误读myval
,因为整个success
回调必须在任何其他事件处理代码开始之前完成。
[*]是的,有WebWorkers,但他们使用消息传递而不是变量共享。