当两个库尝试同时更改同一个dom元素时会发生什么

时间:2011-01-17 13:33:56

标签: javascript

假设我们有2个javascript脚本试图更改相同的DOM元素。 一个尝试将html输入到div中,另一个尝试将div移动到页面上的其他位置(用于A / B测试),我们无法预测何时完成加载和运行。 它会弄乱HTML页面吗?浏览器是否知道要阻止它?

2 个答案:

答案 0 :(得分:2)

你无法真正在同时打电话。 JavaScript不是多线程的,你一次只能做一件事。

您的示例处理的DOM与JavaScript引擎并不真正相关,而是DOM引擎(多线程)。你可以在DOM中同时做很多事情,但是,由于JavaScript是DOM的接口,JavaScript不允许你同时调用两个与DOM相关的函数 - 一个将始终在另一个之前被调用,即使它们同时发生在DOM内存空间(不是JavaScript)中。

答案 1 :(得分:0)

嗯,JavaScript是单线程的,所以虽然看起来两者都在同时执行,但它们并不是真的。如果他们正在修改相同的元素,迟早会尝试修改不存在的内容。但是,这种情况与任何其他改变不存在的DOM元素的尝试没有什么不同。浏览器不会试图阻止这种情况(毕竟,你的代码告诉他们这样做)。