jQuery / AJAX并发访问全局变量

时间:2014-08-01 10:10:36

标签: javascript jquery concurrency thread-safety

我正在编写一些执行普通ajax调用的jQuery代码。我有一个全局Javascript变量,我需要在每次调用时增加线程安全。如果这是Java,我会使用synchronized,但事实并非如此: - )

以下是代码段:

var myval;

function myFunc()
{
    $.ajax({
        url: myurl,
        type: 'GET',
        data: { ...my data... },
        success: function()
        {
            myval++;
        }
    });
}

鉴于myFunc()与点击事件相关联,我如何确保myvar始终安全/持续增加?我知道我可能使用async: false,但我宁愿避免使用它。我甚至不确定它是否会这样。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

没有问题 - JS没有原子性问题,因为没有(用户可见的)线程[*]

除了响应事件或初始脚本加载之外,

在JS中没有发生任何。一段代码在增量期间不可能误读myval,因为整个success回调必须在任何其他事件处理代码开始之前完成。

[*]是的,有WebWorkers,但他们使用消息传递而不是变量共享。