찾다

 >  Q&A  >  본문

.map()과 같은 고차 함수는 JavaScript 내에서 어떻게 작동합니까?

<p>요즘에는 모두가 더 적은 코드를 작성하여 유망한 결과를 얻기 위해 이러한 고차 함수를 사용하려고 노력하고 있습니다. 하지만 이러한 기능이 내부적으로 어떻게 작동하는지 알고 싶습니다. </p> <p>내가 비슷한 글을 썼다고 가정해 보세요</p> <p> <pre class="brush:js;toolbar:false;">var 숫자 = [16, 25, 36]; var 결과 = number.map(Math.sqrt); console.log(결과); // [4, 5, 6]</pre> </p> <p>"숫자" 배열의 각 요소가 하나씩 반복된다는 것을 알고 있지만 <어떻게</em>? </p> <p>찾아보려 했지만 아직 만족스러운 답변을 얻지 못했습니다. </p>
P粉107772015P粉107772015457일 전436

모든 응답(2)나는 대답할 것이다

  • P粉505450505

    P粉5054505052023-08-26 14:30:37

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

    실제 구현(예: 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. 반복 동안 k < < len
      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로 돌아가세요.

    회신하다
    0
  • P粉333395496

    P粉3333954962023-08-26 09:51:45

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

    으아악

    회신하다
    0
  • 취소회신하다