Home  >  Article  >  Web Front-end  >  Interview question: call method in JavaScript

Interview question: call method in JavaScript

yulia
yuliaOriginal
2018-09-08 17:06:151140browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn