Titel:
function fn(a,b){ console.log(this); console.log(a); console.log(a+b); } fn.call(1); fn.call.call(fn); fn.call.call.call(fn,1,2); fn.call.call.call.call(fn,1,2,3);
Antwort:
fn.call(1); // 1,undefiniert,NaN
fn.call.call(fn); undefiniert,NaN
fn.call.call.call(fn,1,2); // 1,2,NaN
fn.call.call.call.call(fn,1,2,3); // 1,2,5
Detaillierte Ideen zur Problemlösung:
fn.call(1); der erste Parameter von call ändert das Schlüsselwort this in der Funktion vor dem Aufruf, sodass 1 ausgegeben wird ; danach gibt es keine Parameter, daher sind a und b undefiniert und das Additionsergebnis ist
fn.call.call(fn); fn.call findet die Call-Methode in Function.prototype (dies ist auch eine Funktion und eine Instanz der Funktionsklasse
, und Sie können auch weiterhin call/apply und andere Methoden aufrufen. Wir können fn.call als betrachten). eine Funktion A und dann connect Das Folgende ist gleich A.call(fn), wobei
die Aufrufmethode ausführt, das Schlüsselwort this in A in function fn ändert und dann Funktion A (fn.call) ausführt >fn.call.call.call(fn,1,2); Durch die vorherige Prototypkettenmethode können wir fn.call.call.call als A(fn.call.call).call-Ausführung betrachten, die in eingeschlossen ist
Der Parameter fn wurde als Funktion ausgeführt, sodass er zur A.call(1,2)-Ausführung wird! 1 wird als erster Parameter verwendet, um dies in der Funktion vor dem Aufruf zu ändern, und die folgenden Parameter werden als tatsächliche Parameter an die formalen Parameter der Funktion übergeben!
fn.call.call.call.call(fn,1,2,3); Gleiches Prinzip wie oben!
Allgemeine Zusammenfassung:
Wenn Sie es nicht gut verstehen, können Sie sich auch an diesen allgemeinen Tipp erinnern:
Wenn zwei oder mehr Aufrufe auftreten, muss der erste Parameter ausgeführt werden Funktion;
Der zweite Parameter dient dazu, dies im ersten Parameter zu ändern.
Der dritte und die folgenden Parameter werden als tatsächliche Parameter an den ersten Parameter übergeben.
Das obige ist der detaillierte Inhalt vonInterviewfrage: Aufrufmethode in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!