ที่จริงแล้วโค้ดของคุณจะใช้งานได้ดีเพียงแค่ประกาศการเรียกกลับของคุณเป็นอาร์กิวเมนต์และคุณสามารถเรียกมันโดยตรงโดยใช้ชื่ออาร์กิวเมนต์
พื้นฐาน
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บางครั้งคุณต้องการที่จะเรียกโทรกลับเพื่อที่จะเห็นค่าเฉพาะสำหรับ คุณสามารถทำได้อย่างง่ายดายด้วยcallฟังก์ชันJavaScript :
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กำหนดไว้ มิฉะนั้นคุณจะได้รับข้อผิดพลาดที่บอกคุณว่าฟังก์ชั่นไม่ได้ถูกกำหนดไว้