شاید شما هم مثل من خیلی وقت ها موقع کد زدن با جاوا اسکریپت کمتر از ; استفاده میکنید چون توی جاوا اسکریپت بودن یا نبودن ; چندان فرقی نداره و کد شما بدون این کاراکتر هم بدرستی کار میکنه. تو شرایط عادی حق با من و شماست و فرقی نداره که ما از سمی کولون استفاده کنیم یا نه ولی شرایطی وجود دارند که ما باید از سمی کولون استفاده کنیم. برای مثال اگر شما کد زیر رو داشته باشید مطمئنا با خطای TypeError: undefined is not a function مواجه خواهید شد

var foo = function() {
console.log("foo")
}
(function(){
console.log("bar")
})()

برای رفع این مشکل تنها کافیه بعد از تعریف تابع foo یک سمی کولون بذاریم و دیگه خبری از خطای بالا نخواهد بود. دلیل این اتفاق ساده است، وقتی ; انتهای تابع گذاشته میشه کامپایلر متوجه میشه که یک عبارت تموم شده و بعد این باید دنبال عبارت جدید باشه پس تابع بی نام بعد از foo بصورت یک عبارت جدید پردازش میشه. ولی وقتی جدا کننده نداریم کامپایلر فرض میکنه که این دو یک عبارت هستند و ساختاری شبیه این دارند

function foo(){}()

پس باید موقع کد زدن دقت بیشتری داشته باشیم و بدونیم که کامپایلر چه برداشتی از کد ما میکنه