gpt4 book ai didi

javascript - 当两个 javascript 事件试图同时修改同一个变量时会发生什么

转载 作者:行者123 更新时间:2023-11-30 08:06:38 26 4
gpt4 key购买 nike

有一个 javascript 代码有变量 messageList 保存消息列表,这可以通过函数 updateMessageList() 更新,如下所示:

var messageList=[];                           //contains list of messages
function updateMessageList(id, lastUpdate); //updates messageList item for given id

//at some point while running
mesasgeList=[
{id:1, lastUpdate:1371650818000},
{id:2, lastUpdate:1371650821000},
.....
]

如果两个不同的源同时为同一个 messageList 项调用 updateMessageList() 函数会发生什么。假设一个带有 id:1 的消息更新来自客户端(当前用户更新消息),另一个来自服务器也用于带有 id:1 的消息(另一个用户更新消息)。然后他们将尝试同时访问和修改 messageList[0].lastUpdate 属性。

来源一:当客户端更新消息表单提交事件时触发函数handleReply()

function handleReply(event) {
.....
var id=event.currentTarget.find('input[name="id"]').val();
//form has an hidden input for id of the message
var d = new Date();
updateMessageList(id, d.getTime());
.....
}

在来源 2 中:JS 对服务器进行 AJAX 调用以检查是否有任何更新,然后运行 ​​updateMessages() 函数作为返回

//server sends following JSON data:{id:1, lastUpdate:1371650823269}
function updateMessages(data) {
.....
updateMessageList(data.id, data.lastUpdate);
.....
}

updateMessageList() 函数都将尝试更改 messageList[0]lastUpdate 属性。

那么我们应该在编程时考虑这些情况还是 javascript 可以处理这些情况?

最佳答案

Javascript 是单线程的。 javascript 中没有并发这样的东西。一个调用将总是在另一个调用之前或之后。也许它可以相差一毫秒,但一个调用会在另一个调用开始之前退出它的 block 。

关于javascript - 当两个 javascript 事件试图同时修改同一个变量时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17191886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com