⊗jsPmFCPf 272 of 505 menu

JavaScript'те IIFE'дин коркунучтуу жактары

Келгиле, эки код бөлүгүн карап көрөлү.

Биринчиси:

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

Экинчиси:

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

Бул эки код бөлүгү дээрлик бирдей, бирок аларды иштетсеңиз - натыйжа ар түрдүү болот. Биринчи код консолго 3 санын чыгарат, ал эми экинчиси - 1 санын.

Эмне үчүн мындай айырмачылык пайда болду: бардыгы бир учурда биринчи саптын аягында чекиттуу үтүр жок болгондуктан, ал эми экинчи учурда - бар.

Сиз суроо бере аласыз: канчалык, анткени JavaScript'те буйруктун аягындагы чекиттуу үтүр милдеттүү эмес! Чынында бул толугу менен туура эмес. Келгиле, чынында эмне болуп жатканын аныктап көрөлү.

Биринчи кодду төмөнкүчө кайра жаза алабыз:

let result = 1 + function() { return 2; }(); console.log(result); // 3 чыгарат

Азыр бирден ачык болуп калды, бирдикке функцияны ошол жерде чакыруунун натыйжасы кошулган, башкача айтканда 2. Ошондуктан акыркы натыйжа 3 болот.

Эгерде бирдиктен кийин чекиттуу үтүр коюлса, анда код интерпретатор тарабынан башкача түшүнүлөт:

// Биринчи буйрук: let result = 1; // Экинчи буйрук: +function() { return 2; }(); // Үчүнчү буйрук: console.log(result); // 1 чыгарат

Башкача айтканда, өзгөрмөгө белгилөө жана функцияны ошол жерде чакыруу ар кандай буйруктар болуп калат. Жана мунун бардыгы чекиттуу үтүрдүн болушуна байланыштуу!

Мына ушундай учурда функцияны ошол жерде чакыруу эч нерсе кылбайт - жөн эле жокко 2 санын кайтарат, ал result өзгөрмөсүнө эч кандай таасир этпейт.

Келгиле, анда түшүнөлү, биз негизи эмне үчүн JavaScript'те чекиттуү үтүр жазбай алабыз. Бизде чекиттуу үтүрсүз ушундай код болсун:

let result = 1 // resultко 1 жазылат let test = 2 // testке 2 жазылат

Ал туура иштейт, анткени интерпретатор ар бир саптын аягында өзү чекиттуү үтүрдү коёт.

Бирок мына ушундай кодго көз салгыла:

let result = 1 + 2; // resultко 3 жазылат

Эми биринчи саптын аягындагы чекиттуу үтүр автоматтык түрдө коюлбайт, анткени интерпретатор түшүнөт, экинчи саптагы буйрук - бул биринчи саптагы буйруктун бир бөлүгү.

Бирок эгерде биз өзүбүз чекиттуу үтүрдү коюп койсок - натыйжа анда башкача болот:

let result = 1; // resultко 1 жазылат + 2; // буйрук эч нерсе кылбайт, бирок ката да болбойт

Бул интерпретатор өзү чекиттуү үтүрдү кийинки буйрук мурунку буйруктун бөлүгү болбогон учурда гана коёт дегенди билдирет.

Эми бул кодго көз салгыла:

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

Чынында эле, экинчи сап - жөн гана биринчи саптагы буйруктун уландысы жана интерпретатор чекиттуу үтүрдү автоматтык түрдө коюлбайт. Ошондуктан эгерде биз биринчи саптын аягында өзүбүз чекиттуу үтүрдү жазсак - натыйжа таптакыр башка болот. Бул бизге мындай деп айтат: маселени алдын алуу үчүн, эң жакшысы, керектүү жерлерде дайыма чекиттуу үтүрдү коюу.

Кыргызча
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČ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
Биз сайттин иштөөсү, аналитика жана персонализация үчүн cookie файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу