실제로 코드는 거의 작동합니다. 콜백을 인수로 선언하면 인수 이름을 사용하여 직접 호출 할 수 있습니다.
기본
function doSomething(callback) {
// ...
// Call the callback
callback('stuff', 'goes', 'here');
}
function foo(a, b, c) {
// I'm the callback
alert(a + " " + b + " " + c);
}
doSomething(foo);
이 호출은 doSomething
이고, 호출 foo
하면 "건물이 여기로 간다"는 경고를 보냅니다.
함수를 호출하고 결과 ( )를 전달하는 대신 함수 참조 ( foo
) 를 전달하는 것이 매우 중요합니다 foo()
. 귀하의 질문에, 당신은 그것을 올바르게 수행하지만 일반적인 오류이기 때문에 지적 할 가치가 있습니다.
더 고급스러운 것들
때로는 콜백을 호출하여에 대한 특정 값을 볼 수도 this
있습니다. JavaScript call
함수 를 사용하면 쉽게 할 수 있습니다 .
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
callback.call(this);
}
function foo() {
alert(this.name);
}
var t = new Thing('Joe');
t.doSomething(foo); // Alerts "Joe" via `foo`
인수를 전달할 수도 있습니다.
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback, salutation) {
// Call our callback, but using our own instance as the context
callback.call(this, salutation);
}
function foo(salutation) {
alert(salutation + " " + this.name);
}
var t = new Thing('Joe');
t.doSomething(foo, 'Hi'); // Alerts "Hi Joe" via `foo`
때로는 콜백을 제공하려는 인수를 개별적이 아닌 배열로 전달하는 것이 유용합니다. 당신은 그렇게 할 수 있습니다 apply
:
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
callback.apply(this, ['Hi', 3, 2, 1]);
}
function foo(salutation, three, two, one) {
alert(salutation + " " + this.name + " - " + three + " " + two + " " + one);
}
var t = new Thing('Joe');
t.doSomething(foo); // Alerts "Hi Joe - 3 2 1" via `foo`
object.LoadData(success)
호출 이후function success
가 정의 되어야합니다 . 그렇지 않으면 함수가 정의되지 않았다는 오류가 발생합니다.