Pekka의 말은 맞지만 함수 포인터 나 델리게이트를 완전히 이해하지 못하는 사람에게 설명하는 데 도움이되는 예를 들어 조금 더 자세히 설명하고 싶습니다.
window.onload설명하기 위해 약간 고안 되었기 때문에 사용하지 않을 것 입니다. 대신 간단한 곱하기 함수를 사용하여 데모합니다.
function Multiply(operator, operand) {
return operator * operand;
}
다음과 같이 작성할 수 있습니다.
Multiply = function(operator, operand) {
return operator * operand;
}
첫 번째 예에서는 그 의미가 명확하지 않을 수 있지만 두 번째 예에서는라는 변수에 매개 변수가 2 개인 함수를 할당하고 있음을 더 명확하게 보여줍니다. Multiply이 함수의 할당 개념은 JavaScript 전체에서 공통적입니다. 이것은 함수가 "일급 시민" 이라는 사실을 보여주는 작은 데모입니다. 즉 , 마치 값을 전달하는 것처럼 정확하게 전달 될 수 있습니다.
이제 할당의 차이를 살펴 보겠습니다.
var operator = 3;
var operand = 4;
var ret = Multiply(operator, operand);
ret 변수를 정의 할 때 Multiply실행되고 반환 값이 할당됩니다.- ret12가됩니다.
다른 방법으로 다시 시도해 보겠습니다.
var operator = 3;
var operand = 4;
var ret = Multiply;
이제 정의의 시점에서 ret, ret당신이됩니다 Multiply당신의에서 얻은 결과 인 반대 기능을 Multiply작동합니다. 를 호출 ret()하면 Multiply함수가 실행되며 호출 한 것처럼 정확하게 호출 할 수 있습니다 Multiply(operator, operand).
var out = ret(3, 4);
와 같다
var out = Multiply(3, 4);
ret의 대리인 으로 사용할 것이라고 효과적으로 말씀하셨습니다 Multiply(). 를 호출 할 때 ret우리는 실제로 Multiply함수를 참조 합니다.
당신의 위로 window.onload. 이것을 다음과 같이 생각하십시오.
window.onload = function() {
//Doing what all good window.onload functions should do...
}
initAll = function() {
return 12;
}
보시다시피 window.onload는 다른 기능과 마찬가지로 특별한 기능이 없습니다. 값을 할당하고, 함수를 할당하고, 원하는 경우 null을 출력 할 수 있습니다. 요점은 window.onload자신의 함수에 대한 것보다 더 특별한 것은 없다는 것입니다. 약간 다른 점은로드 될 때 창에 의해 호출된다는 것입니다. [면책 조항 : 실제로 창 기능을 무효화 한 적이 없으므로 이것이 부정적인 영향을 미칠지 확실하지 않습니다. 누군가는 그것을 호출하기 전에 함수가 할당되었는지 확인하기를 바랍니다 if (window.onload) window.onload();.
이제 initAll()우리가 말하는 것은 다음과 같습니다.
window.onload = initAll();
다음과 같이 말할 수도 있습니다.
window.onload = 12;
그러나 우리 initAll가 괄호없이 말할 때 우리 가 정말로 말하는 것은 내 window.onload 함수가 무엇이든 새로운 함수로 바꾸고 싶습니다. 즉 initAll, 그것을 내 함수 로 바꾸고 window.onload싶습니다. initAll암호.
그래서:
window.onload = function() {
//Doing what all good window.onload functions should do...
}
다음으로 대체됩니다.
window.onload = function() {
return 12;
}
따라서에 대한 호출 은 원래 있던 것이 아니라 함수를 window.onload실행합니다 . 원래 기능을 새 기능으로 교체했습니다.initAllwindow.onload
사실, 당신은 할 수 동등하게 쓰기 :
window.onload = function() {
//Write all your init code right in here instead of having a separate
//initAll function.
}
더 잘 보여줄 수있는 또 다른 예는 다음과 같습니다.
var d = new Date();
var currentTime = d.getTime();
d정의 된 시간이 무엇이든 결국에 할당됩니다 currentTime. 훌륭합니다. 그러나 이는 해당 코드가 포함 된 함수가 호출 된 시간 (예 : 페이지로드 시간)을 확인하려는 경우에만 유용합니다. currentTime호출 된 시간을 현재 시간을 원하면 어떨까요?
var currentTime = function() {
var d = new Date();
return d.getTime();
}
var a = currentTime(); //The current time at the point a is defined...
var b = currentTime; //b is a functional reference to currentTime...
var c = b(); //The current time when variable c is defined
var d = c; //The current time when variable c was defined
우리가 전화하는 방법을 공지 b()우리에 c와 d우리가 부를 수있는 정확하게 지정 currentTime()?