.map()과 같은 고차 함수는 JavaScript 내에서 어떻게 작동합니까?
P粉107772015
P粉107772015 2023-08-25 17:41:30
0
2
369

요즘에는 모두가 더 적은 코드를 작성하여 유망한 결과를 얻기 위해 이러한 고차 함수를 사용하려고 노력하고 있습니다. 하지만 이러한 기능이 내부적으로 어떻게 작동하는지 알고 싶습니다.

내가 비슷한 글을 썼다고 가정해 보세요

var 숫자 = [16, 25, 36]; var 결과 = number.map(Math.sqrt); console.log(결과); // [4, 5, 6]

"숫자" 배열의 각 요소가 하나씩 반복된다는 것을 알고 있지만 <어떻게?

찾아보려 했지만 아직 만족스러운 답변을 얻지 못했습니다.

P粉107772015
P粉107772015

모든 응답 (2)
P粉505450505

모든 공급업체는사양을 따라야 한다고 생각합니다.

실제 구현(예: V8)은 다소 복잡할 수 있습니다. 먼저이 답변을 참조하세요. github에서 v8 소스코드를 참고할 수도 있지만, 그 일부를 분리해서 이해하기는 쉽지 않을 수 있습니다.

위 답변 인용:

ES2015 사양:

  1. O를 ToObject(this값)로 둡니다.
  2. 돌발적인 반품(O).
  3. len을 ToLength(Get(O,"length"))로 설정합니다.
  4. ReturnIfAbrupt(len).
  5. IsCallable(callbackfn)이false이면TypeError예외가 발생합니다.
  6. thisArg가 제공되면TthisArg로 두고, 그렇지 않으면T를 정의하지 않도록 하세요.
  7. A를 ArraySpeciesCreate(O,len)로 설정합니다.
  8. 돌발적인 반품(A).
  9. k을 0으로 둡니다.
  10. 반복 동안klen
    1. Pk를 ToString(k)으로 설정하세요.
    2. kPresent를 HasProperty(O,Pk)로 설정합니다.
    3. ReturnIfAbrupt(kPresent).
    4. 만약kPresenttrue라면,
      1. kValue를 Get(O,Pk)으로 설정하세요.
      2. ReturnIfAbrupt(kValue).
      3. mappedValue를 Call(callbackfn,T, «kValue,k>,또는»으로 설정하세요.
      4. ReturnIfAbrupt(mappedValue).
      5. State를 CreateDataPropertyOrThrow(A,Pk,mappedValue)로 설정합니다.
      6. ReturnIfAbrupt(상태).
    5. k을 1씩 늘립니다.
  11. A로 돌아가세요.
    P粉333395496

    .map콜백을 받아들이고, 배열의 각 항목에 대해 콜백을 호출하고, 새 배열에 값을 할당하는 메서드입니다. 특별한 것은 아닙니다. 스스로도 쉽게 할 수 있습니다:

    으아악
      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!