Vairāk
Kāda ir atšķirība starp saukt un pieteikties?
Kāda ir atšķirība starp call
un apply
, lai izsauktu funkciju?
var func = function() {
alert('hello!');
};
func.apply();
vs func.call();
Vai starp abām iepriekš minētajām metodēm ir veiktspējas atšķirības? Kad labāk izmantot call
, nevis apply
un kad otrādi?
3002
3
Atšķirība ir tāda, ka
apply
ļauj izsaukt funkciju arargumentiem
kā masīvu, betcall
pieprasa, lai parametri būtu skaidri uzskaitīti. Noderīga mnemonika ir "A kā amatu un C kā comma.".Skatīt MDN'dokumentāciju par apply un call.
Pseidsintakse:
theFunction.apply(valueForThis, arrayOfArgs)
theFunction.call(valueForThis, arg1, arg2, ...)
No ES6 ir arī iespēja `
izplatīt
masīvu, lai to izmantotu ar `call`` funkciju, saderību var apskatīt šeit.Koda paraugs:
K. Scott Allen ir jauks rakstījums par šo jautājumu.
Būtībā tās atšķiras ar to, kā tās apstrādā funkciju argumentus.
Tātad:
Lai atbildētu uz jautājumu par to, kad lietot katru funkciju, izmantojiet
apply
, ja nezināt, cik argumentu tiks nodoti, vai ja tie jau ir masīvā vai masīvam līdzīgā objektā (piemēram,arguments
objektā, lai pārsūtītu savus argumentus. Pretējā gadījumā izmantojietcall
, jo argumentus nav nepieciešams ietīt masīvā.Ja es nenododu nekādus argumentus (kā tavā piemērā), es dodu priekšroku
call
, jo es izsaucu funkciju.apply
nozīmētu, ka jūs piemērojat funkciju (neesošajiem) argumentiem.Nevajadzētu būt nekādām veiktspējas atšķirībām, izņemot, ja jūs izmantojat
apply
un argumentus ietinat masīvā (piemēram,f.apply(thisObject, [a, b, c])
, nevisf.call(thisObject, a, b, c)
). Es to neesmu pārbaudījis, tāpēc var būt atšķirības, bet tas būtu ļoti specifiski pārlūkprogrammai. Iespējams, kacall
ir ātrāks, ja jums vēl nav argumentu masīvā, unapply
ir ātrāks, ja jums jau ir.