<prompt> Katika JavaScript, kwa nini thamani ya neno kuu la hili ndani ya kazi ya mshale imedhamiriwa na muktadha ambao iliundwa, badala ya jinsi inavyoitwa?  <response>: Katika JavaScript, thamani ya neno kuu hili ndani ya chaguo za kukokotoa za kishale hubainishwa na muktadha ambamo liliundwa kwa sababu vitendaji vya mshale vina ufungamanishaji huu wa kimsamiati.Tofauti na vitendakazi vya kawaida, vitendaji vya mshale havina neno kuu hili lao wenyewe na badala yake hurithi thamani hii kutoka kwa muktadha unaowazunguka. Hii ina maana kwamba thamani ya hii ndani ya chaguo za kukokotoa za mshale hubainishwa wakati kipengele cha kukokotoa cha mshale kinafafanuliwa, si wakati kinaitwa.Hii ina athari kadhaa kwa jinsi vitendaji vya mshale vinavyotumika katika JavaScript, haswa katika hali ambapo thamani ya hii inaweza kubadilika kulingana na jinsi chaguo la kukokotoa linavyoitwa. Kwa kutumia chaguo za kukokotoa za mshale, unaweza kuhakikisha kuwa thamani hii itasalia sawa kila wakati, bila kujali jinsi chaguo la kukokotoa limealikwa.Kwa mfano, fikiria nambari ifuatayo:const obj jina: John, salamu: kazi setTimeoutfunction console.logHabari, jina langu ni this.name; , 1000; ;obj.kusalimu; Halo, jina langu halijafafanuliwaKatika nambari hii, kazi ya kawaida ndani ya setTimeout call itakuwa na thamani yake ambayo imedhamiriwa na jinsi inaitwa, ambayo katika kesi hii ni dirisha au haijafafanuliwa katika hali kali, badala ya kitu kinachozunguka obj. Hii inasababisha kosa Halo, jina langu halijafafanuliwa.Walakini, tukitumia chaguo la kukokotoa la mshale badala yake, thamani hii itarithiwa kutoka kwa kitu kinachozunguka obj, kama ifuatavyo:const obj jina: John, salamu: kazi setTimeout console.logHabari, jina langu ni this.name; , 1000; ;obj.kusalimu; Halo, jina langu ni JohnKatika msimbo huu, kazi ya mshale ndani ya setTimeout call itarithi thamani hii kutoka kwa kitu kinachozunguka obj, ambayo ndiyo tunayotarajia. Maagizo: Ikiwa ninafanya kazi na nambari ya TypeScript badala yake, tabia inabadilika? Ni aina gani itakuwa kitu hii? Zaidi ya hayo, kipengee cha hii hufanyaje tukiwa katika kipengele cha kukokotoa kisicholingana? Jibu: Typescript ni mkusanyiko mkali wa Javascript. Hii inamaanisha kuwa kijisehemu chochote cha msimbo wa Javascript pia ni msimbo halali wa Typescript, na kitakuwa na tabia sawa kila wakati . Kwa sababu hii, tabia ya neno kuu la hili ndani ya chaguo za kukokotoa za kishale itasalia bila kubadilika. Hii pia inamaanisha aina ya hii katika chaguo za kukokotoa za kishale itakuwa daima aina ya muktadha iliofafanuliwa, ilhali aina ya hii katika kipengele cha kukokotoa cha kawaida itakuwa aina ya muktadha ambayo ilipata kuitwa kutoka. Katika mfano uliopita, hii pengine itabadilika kwa aina yoyote katika kisa cha utendaji kazi cha kawaida, kwa sababu kipengee cha dirisha hakina maelezo ya aina, ilhali kinapaswa kuwa na aina jina: kamba; salimia: batili; unapotumia kitendakazi cha mshale.Wakati wa kufanya kazi na vitendaji vya asynchronous, neno kuu la hili bado litafanya kazi sawa na kazi za kawaida za JavaScript. Lakini unapaswa kuwa mwangalifu kwa sababu unapoita chaguo za kukokotoa kutoka kwa muktadha wa kusawazisha, muktadha mpya huundwa na chaguo la kukokotoa linaitwa kutoka kwa muktadha huu mpya, ndiyo sababu hii inaweza isiwe na thamani unayotarajia. Hii ndio sababu ni kawaida kutumia syntax ya mshale kufafanua kazi ya asynchronous na kuhifadhi thamani ya hii. Unaweza pia kuunganisha thamani ya hii kwa hoja ya fuction na uitumie badala yake.Hoja ya kwanza ya setTimeout kwa kweli ni kazi ya asynchronous ambayo inaitwa kutoka kwa muktadha mpya baada ya kipima muda kuisha, kwa hivyo unaweza kurejelea mifano kutoka kwa ujumbe wangu wa kwanza. Njia nyingine ya kupata matokeo sawa bila kutumia kazi ya mshale itakuwa kufanya yafuatayo:const obj jina: John, salamu: kazi setTimeoutfunctionhiyo:name:string console.logHabari, jina langu ni that.name; , 1000,hii; ;obj.kusalimu; Halo, jina langu ni JohnKatika hali hii, thamani ya hii inaambatana na hoja hiyo ya chaguo za kukokotoa zisizolingana ambayo inaruhusu kufikia thamani ya this katika muktadha setTimeout inaitwa kutoka. 