JavaScript中回调的混乱,Node.js

JavaScript中回调的混乱,Node.js,javascript,node.js,sockets,Javascript,Node.js,Sockets,在上面的代码中,我不了解它是如何工作的。默认状态更改为“Testing..”,3秒后,它再次显示默认状态。我很困惑 它是如何工作的 statusDefault = status.textContent, setStatus = function(s){ status.textContent = s;//to set any status if(s != statusDefault){ var delay = setTimeout(function(){

在上面的代码中,我不了解它是如何工作的。默认状态更改为“Testing..”,3秒后,它再次显示默认状态。我很困惑

它是如何工作的

statusDefault = status.textContent,

setStatus = function(s){
    status.textContent = s;//to set any status

    if(s != statusDefault){
        var delay = setTimeout(function(){
            setStatus(statusDefault);
            clearInterval(delay);
         },3000);
    }
};

setStatus('Testing..');
在内容更改之前复制内容,并将其缓存在JavaScript中。这是默认内容

statusDefault = status.textContent,
运行函数时,将第一个参数设置为
status
textContent
。更简单地说,它只是在运行函数时更改元素的内容

setStatus = function(s){
    status.textContent = s;
首先检查是否未输入默认值

if(s != statusDefault){
创建一个持续3000毫秒(3秒)的超时,在3秒后,它用
setStatus(statusDefault)
再次在内部调用自己,这会将内容重置为原来的内容(因为
statusDefault
),并且它也会呈现前面的if语句false,因此,它不会创建另一个超时

下面是一个更简短(可能更容易理解)的列表:

  • 原始内容被复制到
    statusDefault
  • 内容设置为
    测试..
  • “测试…”
    不等于原始内容
  • 创建持续3秒的超时(创建3秒延迟)
  • 函数再次在内部调用自身,传入
    statusDefault
  • 内容设置为
    statusDefault
  • 如果陈述是错误的。没有更多的任务,JavaScript就完成了
  • var delay = setTimeout(function(){
      setStatus(statusDefault);
      clearInterval(delay);
    }, 3000);