⊗jsPmFCPf 272 of 505 menu

Хавфҳои ноаён дар IIFE дар JavaScript

Биёед ду порчаи кодро дида бароем.

Якум:

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 истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан