Javascript ถูกกำหนดให้เป็นภาษาreentrantซึ่งหมายความว่าไม่มีเธรดที่เปิดเผยต่อผู้ใช้อาจมีเธรดในการนำไปใช้งาน ฟังก์ชันเช่นsetTimeout()
และการเรียกกลับแบบอะซิงโครนัสจำเป็นต้องรอให้สคริปต์เอ็นจินเข้าสู่โหมดสลีปก่อนจึงจะสามารถทำงานได้
นั่นหมายความว่าทุกอย่างที่เกิดขึ้นในเหตุการณ์จะต้องเสร็จสิ้นก่อนที่เหตุการณ์ต่อไปจะได้รับการประมวลผล
ดังที่กล่าวไว้คุณอาจต้องใช้ mutex หากรหัสของคุณทำบางอย่างโดยที่คาดว่าค่าจะไม่เปลี่ยนแปลงระหว่างเวลาที่เหตุการณ์อะซิงโครนัสเริ่มทำงานและเมื่อมีการเรียกกลับ
ตัวอย่างเช่นหากคุณมีโครงสร้างข้อมูลที่คุณคลิกปุ่มเดียวและส่ง XmlHttpRequest ซึ่งเรียกการเรียกกลับการเปลี่ยนแปลงโครงสร้างข้อมูลในลักษณะทำลายล้างและคุณมีปุ่มอื่นที่เปลี่ยนโครงสร้างข้อมูลเดียวกันโดยตรงระหว่างเมื่อเหตุการณ์นั้น เริ่มทำงานและเมื่อดำเนินการโทรกลับผู้ใช้สามารถคลิกและอัปเดตโครงสร้างข้อมูลก่อนการติดต่อกลับซึ่งอาจสูญเสียค่าไป
ในขณะที่คุณสามารถสร้างเงื่อนไขการแข่งขันแบบนั้นได้ แต่มันง่ายมากที่จะป้องกันสิ่งนั้นในโค้ดของคุณเนื่องจากแต่ละฟังก์ชันจะเป็นอะตอม มันจะเป็นงานมากและใช้รูปแบบการเข้ารหัสแปลก ๆ เพื่อสร้างเงื่อนไขการแข่งขันในความเป็นจริง