Yesterday I saw a very interesting js interview question on the Internet, so I discussed it with my colleagues. I found that it was very confusing at first, but it suddenly became clear to me. After I understood it, I found that it was quite simple. I would like to share it with you!
The question is as follows: var a = Function.prototype.call.apply(function(a){return a;}, [0,4,3]);alert(a);
The analysis steps are as follows:
1. Treat Function.prototype.call as a whole. The call method is a local method implemented by the browser and is an internal method of the function type
var a = (Function.prototype.call ).apply(function(a){return a;}, [0,4,3]);
2. fun.apply(obj,args) is equivalent to obj.fun(args), which One step is the key point and must be understood!
(function(a){return a;}).apply(0,[4,3])
(function(a){return a;}).call(0,4,3)
3. At this step, the result is obvious. a is 4, and the result of alert is 4.
The confusing point of this question is Function.prototype.call. Once you understand it, it will be clear. Got it!