代码之家  ›  专栏  ›  技术社区  ›  tur1ng

同步:onerror事件和n++

  •  0
  • tur1ng  · 技术社区  · 14 年前

    我刚刚读了一点JavaScript,并介绍了一些处理加载图像过程的代码:

    var n = 0;
    ...
    for (...) {
      ...
      image[i].onload = function { n++; };
    }
    

    这段代码是安全的还是在访问变量时可能存在任何类型的争用 n

    2 回复  |  直到 14 年前
        1
  •  3
  •   user166390 user166390    14 年前

    引发每个映像的ONLOAD事件的时间(相对彼此,如果有的话)通常是不确定的。考虑诸如浏览器缓存、并发下载或失败尝试之类的问题。

    ,一次只有一个JavaScript“执行上下文”;即 n 将反映ONLOAD处理程序被调用的总次数(在给定时间)。也就是说,对于一个给定的页面,所有的JS都是原子的,直到它完成为止(在事件发生之前都会向浏览器屈服)

    “网络工作者”也适用于这个事件模型;线程和变量访问之间没有传统的“竞争条件”。但是,任务之间的任何共享(可变)状态都可能导致竞争条件,尽管是在更高的级别上。

        2
  •  0
  •   ChaosPandion    14 年前

    这是非常安全的,因为大多数JavaScript是在单线程上下文中运行的。唯一需要注意的是webworkers,但它们的设计非常好,只能通过JSON消息进行通信。