从函数和事件处理程序访问相同的变量

时间:2013-06-24 20:51:09

标签: javascript

假设我有一个可以通过两个函数修改的变量:一个通过setTimeout定期调用,另一个是事件处理程序:

var a = [];
function foo()
{
   var x = a.pop();
   // do something with x...
   setTimeout(function(){ foo(); }, 1);
}
//...
someElement.addEventListener("keypress", function(e){ a.push("some value"); }, true);

这段代码安全吗?事件监听器和foo是在同一个线程还是在不同的线程中运行?如果它们在不同的线程中运行,那么javascript运行时是否必须保证对a的访问是同步的?

1 个答案:

答案 0 :(得分:3)

JavaScript在浏览器中始终是单线程的。您的事件监听器没有任何问题。

我会通过用户this excellent answer

将您推荐给Jonathon