Home > Article > Web Front-end > Interview question: call method in JavaScript
Title:
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);
Answer:
fn.call(1); // 1,undefined,NaN
fn.call.call(fn); // fn, undefined,NaN
fn.call.call.call(fn,1,2); // 1,2,NaN
fn.call.call.call.call(fn,1,2,3); // 1,2,5
In-depth problem-solving ideas:
fn.call(1);The first parameter of call changes the keyword this in the function before call, so it outputs 1; there are no parameters afterwards Therefore, a and b are undefined, and the addition result is NaN;
fn.call.call(fn); This part is difficult, but it is also easy to understand! fn.call finds the call method on Function.prototype (this is also a function and an instance of the function class
, and you can also continue to call call/apply and other methods) We can regard fn.call as a function A and then connect The following is equivalent to A.call(fn), where the call method is executed, the keyword this in A is modified to the function fn, and then the function A (fn.call) is executed;
fn.call. call.call(fn,1,2); Through the previous prototype chain method, we can regard fn.call.call.call as A(fn.call.call).call execution. At this time, it is enclosed in
The parameter fn has been executed as a function, so it becomes A.call(1,2) execution! 1 is used as the first parameter to change this in the function before call, and the following parameters are passed as actual parameters to the formal parameters of the function!
fn.call.call.call.call(fn,1,2,3); Same as the previous principle!
General summary:
If you don’t understand it well, you can also remember this general tip:
When encountering two or more calls, the first parameter is executed. Each parameter must be a function;
The second parameter is to change this in the first parameter;
The third and subsequent parameters are passed as actual parameters to the first parameter.
The above is the detailed content of Interview question: call method in JavaScript. For more information, please follow other related articles on the PHP Chinese website!