对Javascript方法的调用是线程安全的还是同步的?
我对Javascript还是新手。我正在开发一个简单的页面,在该页面中,我单击一个按钮获取servlet上的值并显示它。它工作得很好,除非我疯狂地点击按钮。有时,显示的结果为空 我想知道这是否是由于同时调用以下同一个函数造成的:对Javascript方法的调用是线程安全的还是同步的?,javascript,null,thread-safety,synchronized,Javascript,Null,Thread Safety,Synchronized,我对Javascript还是新手。我正在开发一个简单的页面,在该页面中,我单击一个按钮获取servlet上的值并显示它。它工作得很好,除非我疯狂地点击按钮。有时,显示的结果为空 我想知道这是否是由于同时调用以下同一个函数造成的: function loadXMLDoc2(retr) { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
function loadXMLDoc2(retr) {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
$("#" + retr).button('option', 'label', xmlhttp.responseText);
// document.getElementById(retr).innerHTML=xmlhttp.responseText;
}
}
var param = "cmd=" + encodeURIComponent(retr);
document.getElementById("TOP_LEFT").innerHTML = param;
xmlhttp.open("GET","/WebFront/Asynclet?" + param,true);
xmlhttp.send(null);
}
Javascript是线程安全的吗?如果没有,我如何同步或隔离对该方法的调用?除了HTML5 web workers(这些web workers受到非常严格的控制,显然不是您所要求的),浏览器中的Javascript是单线程的,因此常规Javascript编程不存在线程安全问题。一个执行线程将在下一个线程开始之前完成。没有两个Javascript完全同时运行 像ajax响应这样的事情会经过事件队列,并且只有在任何其他执行线程完成时才会执行 有关更多信息,请参阅
有关ajax响应回调的具体讨论,请参见。在浏览器上下文中,JavaScript基本上是单线程的。(有一些较新的浏览器功能提供了一种线程模型,但线程交互非常有限,无法直接共享数据。)我认为大多数浏览器都会尝试阻止竞争条件。我在JavaScript中没有看到任何同步块或类似的东西,因为它的设计非常简单(而且是单线程的)。