⊗jsPmFCPf 272 of 505 menu

JavaScript-də IIFE-nin Tələ Təpələri

Gəlin iki kod parçasını nəzərdən keçirək.

Birinci:

let result = 1 +function() { return 2; }(); console.log(result);

Ikinci:

let result = 1; +function() { return 2; }(); console.log(result);

Bu iki kod parçası demək olar ki, eynidir, amma onları işə salsaq - nəticə fərqli olacaq. Birinci kod konsola 3 rəqəmini çıxaracaq, ikinci isə - 1 rəqəmini.

Belə bir fərq niyə yarandı: bütün iş odur ki, bir halda birinci sətrin sonunda nöqtəli vergül yoxdur, ikinci halda isə var.

Siz soruşa bilərsiniz: bu necə ola bilər, axı JavaScript-də əmr sonunda nöqtəli vergül məcburi deyil! Əslində bu tam belə deyil. Gəlin anlayaq, əslində nə baş verir.

Birinci kodu belə yenidən yazmaq olar:

let result = 1 + function() { return 2; }(); console.log(result); // 3 çıxaracaq

Indi dərhal aydın oldu ki, birə yerində çağırılan funksiyanın nəticəsi, yəni 2 əlavə olunur. Buna görə yekun nəticə 3 olacaq.

Birdən sonra nöqtəli vergül qoyulsa, kod interpreator tərəfindən başqa cür qəbul olunacaq:

// Birinci əmr: let result = 1; // Ikinci əmr: +function() { return 2; }(); // Üçüncü əmr: console.log(result); // 1 çıxaracaq

Yəni dəyişənə mənimsətmə və funksiyanı yerində çağırma ayrı-ayrı əmrlər olacaq. Və bütün bunlar nöqtəli vergülün olmasına görə!

Belə çıxır ki, bu halda funksiyanı yerində çağırmaq ümumiyyətlə heç nə etmir - sadəcə heç yerə 2 rəqəmini qaytarır, hansı ki result dəyişəninə heç bir təsir etmir.

Gəlin onda anlayaq, biz niyə ümumiyyətlə JavaScript-də nöqtəli vergül yaza bilmirik. Bizim nöqtəli vergülsüz belə bir kodumuz olsun:

let result = 1 // result-a 1 yazılacaq let test = 2 // test-ə 2 yazılacaq

O düzgün işləyir, çünki interpretator özü hər sətrin sonuna nöqtəli vergül qoydu.

Amma belə bir koda baxın:

let result = 1 + 2; // result-a 3 yazılacaq

Indi birinci sətrin sonunda nöqtəli vergül avtomatik qoyulmayacaq, çünki interpretator başa düşür ki, ikinci sətrin əmri - bu birinci sətrin əmrinin bir hissəsidir.

Amma əgər biz özümüz nöqtəli vergül qoysaq - nəticə tamamilə başqa olacaq:

let result = 1; // result-a 1 yazılacaq + 2; // əmr heç nə etmir, amma səhv də olmayacaq

Belə çıxır ki, interpretator özü nöqtəli vergülü yalnız o halda qoyur ki, növbəti əmr əvvəlkinin bir hissəsi olmasın.

Indi isə bu koda baxın:

let result = 1 +function() { return 2; }(); console.log(result);

Həqiqətən də, ikinci sətr - sadəcə birinci sətrin əmrinin davamıdır və interpretator nöqtəli vergülü avtomatik qoymur. Məhz buna görə, əgər biz özümüz nöqtəli vergülü birinci sətrin sonuna yazsaq - nəticə tamamilə başqa olacaq. Bu o deməkdir ki, problemdən qaçınmaq üçün, ən yaxşısı həmişə lazımi yerlərdə nöqtəli vergülü qoymaqdır.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et