Որն է իրական տարբերությունը «հետկանչման գործառույթից» և «նորմալ գործառույթից»:


պատասխանել 1:

Հետադարձ կապի գործառույթները նորմալ գործառույթներ են, դրանք փոխանցվում են միայն որպես պարամետրեր այլ գործառույթների: Ենթադրելով, որ մեր փաստաթղթում կա կոճակ, մենք կարող ենք օգտագործել այս ծածկագիրը.

Գործառույթի logElementText (eventOrElement) {if (! EventOrElement) {գործարկել նոր RefernceError («Ոչ մի իրադարձություն կամ տարր նշված չէ»); if (eventOrElement.target) {// Անցավ իրադարձության օբյեկտ: console.log (eventOrElement.target.textContent); } other {// Ենթադրենք, որ նյութը ներկայացվել է: console.log (eventOrElement.textContent); button} var կոճ = document.querySelector ('կոճակ'); // Մենք կարող ենք օգտագործել logElementText- ը `որպես հետադարձ կապ. Կոճակը.addEventListener ('սեղմեք', logElementText); // Կամ մենք կարող ենք ուղղակիորեն զանգահարել գործառույթը `logElementText (կոճակ);

Ուշադրություն դարձրեք, թե ինչպես կարելի է logElementText- ը փոխանցել որպես հետադարձ կապ addEventListener- ի միջոցով: Այս դեպքում այն ​​կատարվում է այն դեպքում, երբ կոճակի վրա տեղի է ունենում կտտացման իրադարձություն, կամ մենք ուղղակի կարող ենք ուղղակիորեն զանգահարել գործառույթն ու անցնել մի տարր, քանի որ այն գրված է այնպես, որ այն կարող է մշակել երկուսն էլ:

Այս դեպքում հետկանչը կատարվել է զննարկչի իրադարձությունների մշակողի կողմից, բայց մենք դա կարող ենք անել ինքներս.

Function loadSomeData (URL, հետադարձ կապ) {if (! Url) {հարուցել նոր հղման սխալ ('URL- ն նշված չէ'); } if (! callback || typeof callback! == 'գործառույթ') {գործարկել նոր TypeError ('' հետադարձ կապը գործառույթ չէ '); var xhr = նոր XMLHttpRequest (); xhr.open ('GET', url, true); xhr.onload = գործառույթ () {if (xhr.status <400) {// Այստեղ մենք իրականացնում ենք տրամադրված հետադարձ կապը: Զանգահարեք (xhr.response); } other {console.log ('Օ dear, սիրելիս, ինչ-որ բան չհաջողվեց .('); console.log (xhr.statusText);}} xhr.send ();} function displayData (data) {console.log (data) ;} loadSomeData ('/ fetch-data? format = json', displayData); displayData ({անունը ՝ 'Andy', ազգանունը 'Farrell', գտնվելու վայրը '' Անգլիա ', հոբբի `[' photography ',' ծրագրակազմի մշակում ') });

Տեսեք, թե ինչպես ենք մենք պարզապես զանգի հետադարձման պարամետրը անվանում 15 տողում, կարծես դա գործառույթ է: Նկատի ունեցեք նաև, որ մենք վերցնում ենք որոշ հակափաստարկներ տող 5-ով ՝ ապահովելու համար, որ հետկանչն իրականում գործառույթ է:

Ի վերջո, զանգերի վերադարձը հաճախ տրվում է որպես անանուն գործառույթներ, այսինքն ՝ գործառույթներ, որոնք անվանում չունեն և փոխանցվում են inline հետևյալ կերպ.

loadSomeData ('/ fetch-data? format = text', գործառույթ (տվյալներ) {var UpperCased = data.toUpperCase (); console.log (UpperCased);});

Փոխանակ գոյություն ունեցող գործառույթը որպես loadSomeData- ի երկրորդ պարամետր ապահովելու փոխարեն, մենք այստեղ ուղղակի ուղղակի անանուն գործառույթ ենք ապահովում: Այլ կերպ ասած, մենք տրամադրում ենք մի գործառույթ բառացի, ճիշտ այնպես, ինչպես նախորդ առարկայի 31-րդ տողի 31-րդ տողում ցուցադրված օբյեկտի համար բառացի ապահովեցինք:

Այս ամբողջ գործի պատճառն այն է, որ JavaScript- ի գործառույթներն առաջին կարգի օբյեկտներ են, այլ կերպ ասած, դրանք նման են ցանկացած այլ օբյեկտի. Կարող եք նշանակել փոփոխական, որպես գործառույթ, գործառույթը կարող է ունենալ հատկություններ և մեթոդներ (օրինակ ՝ զանգահարել և կիրառել) )), և դուք կարող եք դրանք փոխանցել այլ գործառույթների ՝ որպես պարամետր:


պատասխանել 2:

Հետ կանչելով գործառույթը. Երբ ցանկանում եք որևէ գործողություն կատարել որևէ միջոցառման վրա

Ինչպե՞ս ցուցադրել ժամանակը կոճակի սեղմումով:

Այնուհետև այս կոճակի համար շրջանցեք գործառույթի գործառույթը:

Այսպիսով, եթե այս կոճակը կտտացվի (անկախ ժամանակից), դիմում-ներքին շրջանակը միջոցառումը անվանում է onclick, և ձեր գործառույթը onclick կոչվում է:

Նորմալ գործառույթ. Յուրաքանչյուր գործառույթ նորմալ գործառույթ է: