찾다

 >  Q&A  >  본문

javascript - Apply() 및 call()에 대한 질문

으아악

질문:
1.sum.apply(this,arguments)는 apply 메소드를 호출하는 객체 sum을 참조합니다. 이것은 동일한 범위에서 실행되는 callSum() 및 sum()을 참조하며 "sum1, sum2"를 참조합니다.
2. 프로젝트에서 apply()와 call()의 적용값은 무엇인가요?

滿天的星座滿天的星座2708일 전1171

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

  • 淡淡烟草味

    淡淡烟草味2017-07-05 11:03:57

    위에 쓴 내용은 정말 복잡해요 :)

    질문자가 무엇에 대해 헷갈려하는지 들어보세요
    1:

    으아악

    arguments는 함수에 전달된 인수에 해당하는 배열형 객체입니다. 인수 객체는 모든 함수에서 사용할 수 있는 지역 변수입니다. 인수 개체를 사용하여 함수 내에서 함수의 인수를 참조할 수 있습니다.

    PS: 이것의 요점은 함수가 정의될 ​​때 결정될 수 없습니다. 함수가 실행될 때만 이것이 가리키는 대상이 결정될 수 있습니다. 사실 이것의 마지막 요점은 그것을 호출하는 객체입니다

    2. 통화 및 적용의 적용 값(존재 의미):

    함수 런타임 컨텍스트를 변경하는 함수가 존재합니다. 즉, 함수 본체 내부에서 this의 포인팅을 변경하는 것입니다
    "직접 말하면 a에는 xx 메소드가 있지만 b에는 없습니다. B가 a에게 빌려달라고 요청할 수 있습니다!" (이건 그냥 상속 아닌가요~)

    전화와 신청의 차이점:

    매개변수를 받아들이는 방식이 다릅니다.

    다음과 같습니다.
    call은 연속 매개변수를 허용하고 Apply는 배열 매개변수를 허용합니다.
    A.call(this, a,b,c,d)
    A.apply(this, [a,b,c,d])

    A포털: http://www.jianshu.com/p/a7b1...

    회신하다
    0
  • typecho

    typecho2017-07-05 11:03:57

    1. arguments는 함수 배열 객체를 나타내는 함수의 내장 속성 중 하나입니다. 즉, callSum1의 인수는 num1 및 num2를 참조합니다
      https://developer.mozilla.org...

    2. apply 및 call의 값은 지정된 함수에서 특정 개체를 가리킬 수 있다는 것입니다. 예를 들어 document.querySelectorAll()를 사용하여 얻은 dom은 실제로 배열이 아니라 배열과 유사한 개체입니다. 배열 방법은 다음과 같습니다

    으아악

    apply와 call의 주요 차이점은 매개변수 형식입니다. 제목은 MDN을 참조하는 것이 좋습니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-07-05 11:03:57

    1.sum.apply(this,arguments)는 apply 메소드를 호출하는 객체 sum을 참조합니다. 이는 동일한 범위에서 실행되는 callSum() 및 sum()을 참조합니다. 인수는 "sum1, sum2"를 참조합니다.

    2. 프로젝트에서 apply()와 call()의 적용값은 무엇인가요?

    1개의 실행 결과가 둘 다 반환됨 20 20

    sum.apply(this,arguments) 호출 sum에 적용을 사용하여 sum이 실행될 때 this가 현재 this임을 지정하는 것을 의미합니다. 다음 인수는 배열과 유사한 객체이므로 간단히 배열로 처리할 수 있습니다.

    sum.apply(this,[num1, num2]) 위와 비슷합니다.

    논쟁과 관련하여 스크린샷을 게시하면 지각적으로 이해할 수 있습니다


    다음은 두 번째 사항에 대한 답변입니다

    손으로 고른 것

    이해하기 쉽습니다. 예를 들어 Ajax 요청의 성공 콜백 중에 이 포인터를 변경하면 됩니다

    예를 들어 vue를 개발할 때 화살표 기능이 없으면 var that = this를 사용하여 이를 임시로 저장해야 합니다. 이걸 직접 고를 수 있다면 이런 문제는 없을 거예요

    밤 하나 주세요

    으아악

    배열과 유사한 객체를 실제 배열로 변환

    인수는 함수의 매개변수 목록을 배열과 같은 객체 형태로 저장합니다.

    으아악

    사실 여기에서 볼 수 있습니다. 슬라이스를 실행하려면 객체가 정상적으로 실행되고 결과를 반환하기 위한 length 正确的下标만 있으면 됩니다.

    배열 유사 객체에는 다양한 배열 메서드를 사용할 수 있으므로 배열 유사 객체는 실제로 많은 경우 배열로 간주될 수 있습니다.

    으아악


    더욱 배열처럼 만들 수도 있습니다

    으아악

    객체는 실제로 배열과 비슷합니다

    부분 함수 구현 부분 함수

    다음과 같은 수학의 부분 함수와 유사합니다.

    기능 f(x, y) = x + y
    如果令 y = k 那么可以得到偏函数 f(x, k) = x + k
    ( 或者这样可能更好理解: f(x, 4) = x + 4 )

    Bind는 일반적으로 부분 기능을 구현하는 데 사용됩니다. 하지만 Apply, Call, Bind는 집중적으로 논의해야 합니다.

    으아악

    위의 logger를 달성하려면 Apply를 사용하세요.

    으아악

    고차 함수 및 카레링

    고차 함수는 일반적으로 반환 값이 함수이거나 매개 변수가 함수인 함수를 나타냅니다.

    setTimeout는 좋은 예입니다. 매개변수(일반적으로 함수)를 받아들이고 일정 지연 후에 이를 실행합니다.
    그러나 이를 전달한 후에는 일반적으로 전역 개체 창을 가리킵니다. 이를 지정하려면 호출 적용 및 바인딩을 사용해야 합니다.

    위의 logger2는 이를 수행하고 함수를 반환합니다


    커링에 대해 먼저 함수부터 살펴보겠습니다add

    으아악

    매개변수를 하나씩 전달할 수 있는 경우 두 번째 매개변수에 전달할 때 결과를 얻습니다.

    으아악

    첫 번째 실행은 함수를 반환합니다. add가 수학적 의미에서 함수로 간주되면 f(x, y) = x + y 我们执行了一次 add(1) 得到 add1 其实就是令 x = 1이므로 부분 함수

    를 얻습니다.

    f(1, y) = 1 + y

    y를 두 번째로 실행하면 실제 값을 얻을 수 있으며, 공식을 사용하여 결과를 계산할 수 있습니다.

    이것은 실제로 단계별 제거 과정입니다.


    무슨 용도인가요?

    저는 함수형 프로그래밍이 처음이고 아직 본질을 파악하지 못했습니다. 커링의 유일한 유용성은 惰性求值
    모든 매개변수가 제공될 때까지 지금 작업이 실행되지 않습니다. 매개변수가 충분할 때 결과가 계산됩니다.


    밤을 새워 SF를 찾아보니 이것밖에 생각이 나지 않았습니다. . . .

    회신하다
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-07-05 11:03:57

    스코프를 수동으로 설정하세요. this

    회신하다
    0
  • 迷茫

    迷茫2017-07-05 11:03:57

    바이두에서 검색해보시면 아실 겁니다.

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