질문:
1.sum.apply(this,arguments)는 apply 메소드를 호출하는 객체 sum을 참조합니다. 이것은 동일한 범위에서 실행되는 callSum() 및 sum()을 참조하며 "sum1, sum2"를 참조합니다.
2. 프로젝트에서 apply()와 call()의 적용값은 무엇인가요?
淡淡烟草味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...
typecho2017-07-05 11:03:57
arguments는 함수 배열 객체를 나타내는 함수의 내장 속성 중 하나입니다. 즉, callSum1의 인수는 num1 및 num2를 참조합니다
https://developer.mozilla.org...
apply 및 call의 값은 지정된 함수에서 특정 개체를 가리킬 수 있다는 것입니다. 예를 들어 document.querySelectorAll()
를 사용하여 얻은 dom은 실제로 배열이 아니라 배열과 유사한 개체입니다. 배열 방법은 다음과 같습니다
apply와 call의 주요 차이점은 매개변수 형식입니다. 제목은 MDN을 참조하는 것이 좋습니다.
巴扎黑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를 찾아보니 이것밖에 생각이 나지 않았습니다. . . .