어제 인터넷에서 매우 흥미로운 js 면접 질문을 보고 동료들과 논의를 해보니 처음에는 매우 혼란스러웠지만, 이해하고 나니 꽤 이해가 되었습니다. 간단합니다. 공유하고 싶습니다!
질문은 다음과 같습니다. var a = Function.prototype.call.apply(function(a){return a;}, [0,4,3]);alert(a)
분석 단계는 다음과 같습니다.
1. Function.prototype.call을 전체적으로 처리합니다. 호출 메서드는 브라우저에서 구현한 로컬 메서드이며 함수 유형의 내부 메서드입니다. >var a = (Function.prototype.call ).apply(function(a){return a;}, [0,4,3])
2. obj.fun(args)와 동일합니다. 한 단계가 핵심이며 이해해야 합니다!
(function(a){return a;}).apply(0,[4,3])
(function(a){return a;}).call(0,4,3)
3. 이 단계에서 결과는 4이고, 경고의 결과는 4입니다.
이 질문의 혼란스러운 점은 Function.prototype.call입니다. , 알겠습니다!