Hiểu đơn giản về hàm Callback trong Javascript

Ngày đăng: 06/02/2020   -    Cập nhật: 14/04/2021
Chắc là bạn đã nghe về hàm Callback trong Javascript?


Hàm Callback trong Javascript

Hàm Callback trong Javascript


Vậy Callback là gì?


Hãy cùng mình tìm hiểu callback qua bài viết này nhé. (Sau đó, bên dưới có ví dụ để bạn dễ hiểu hơn)



Callback là gì?



Nói một cách đơn giản: Callback là một hàm sẽ được thực hiện sau khi một hàm khác đã thực hiện xong - vì thế nó có tên là callback.


Cụ thể hơn: Trong JavaScript, hàm là đối tượng. Do đó, các hàm có thể lấy các hàm làm đối số và có thể được trả về bởi các hàm khác. Các hàm thực hiện điều này được gọi là higher - order function (Hàm bậc cao hơn). Bất kỳ hàm nào được truyền dưới dạng đối số được gọi là hàm callback.


Hơi khó hiểu một chút nhỉ? :D


Ok, vậy hãy thử xem qua ví dụ về hàm callback nào.



Tại sao chúng ta cần hàm Callback?



Chúng ta cần hàm callback vì một lý do rất quan trọng - JavaScript là ngôn ngữ hướng sự kiện.


Điều này có nghĩa là thay vì chờ phản hồi trước khi tiếp tục, JavaScript sẽ tiếp tục thực thi trong khi lắng nghe các sự kiện khác.


Hãy xem xét một ví dụ cơ bản:




function first(){
    console.log("Một");
}
function second(){
    console.log("Hai");
}
first();
second();



Nếu như bạn đã HỌC JAVASCRIPT CƠ BẢN rồi thì bạn cũng biết:

  • Trình biên dịch đọc mã từ trên xuống dưới, từ trái qua phải.
  • Hàm viết trước thì được thực hiện trước và hàm viết sau thì được thực hiện sau.

Chương trình này sẽ ghi nhật ký sau vào console:



// Một
// Hai



Tất cả đều tốt.


Nhưng cái gì sẽ xảy ra nếu hàm first chứa một số loại code không thể thực thi ngay lập tức?


Ví dụ: Một API request mà chúng ta phải gửi yêu cầu sau đó chờ 1 khoảng thời gian để nhận phản hồi?


Để mô phỏng hành động này, chúng ta sẽ sử dụng setTimeout


Đây là một hàm JavaScript gọi một hàm sau một khoảng thời gian nhất định.


Chúng ta sẽ tạm hoãn hàm của mình trong 5000 mili giây để mô phỏng API request.


Code Javascript mới của chúng ta sẽ trông như thế này:




function first(){
    // Mô phỏng delay code
    setTimeout( function(){
        console.log("Một");
    }, 5000 );
}
function second(){
    console.log("Hai");
}




Bạn không cần phải hiểu cách hàm setTimeout() hoạt động ngay bây giờ.


Tất cả vấn đề là bạn thấy là chúng ta đã di chuyển console.log(1); vào bên trong hàm setTimeout().


Vậy thì, bây giờ chúng ta gọi hàm thì điều gì sẽ xảy ra?




first();
second();

// Hai
// Một



Mặc dù chúng ta đã gọi hàm first() trước tiên, nhưng lại nhận được kết quả sau hàm second().


Nó không phải là JavaScript đã không thực hiện các hàm của chúng ta theo thứ tự mà chúng ta muốn, mà là JavaScript đã không đợi phản hồi từ hàm first() trước khi chuyển sang thực hiện second().




Vậy tại sao mình lại cho bạn thấy điều này?


Bởi vì bạn có thể chỉ cần gọi một hàm khác và hy vọng chúng thực hiện theo đúng thứ tự.


Callbackmột cách để đảm bảo code nhất định không thực thi cho đến khi code khác thực hiện xong.



Thử tạo hàm Callback trong Javascript



OK, bây giờ hãy thử tạo một hàm callback trong JavaScript.


Hãy mở Visual Studio Code > Tạo một file callback.js và gõ đoạn code sau:




function doHomework(subject) {
    console.log(`Bắt đầu làm bài tập ${subject}.`);
}



Lưu ý: Dấu ` không phải dấu '


Ở trên, chúng ta đã tạo ra hàm doHomework(). Hàm này có một biến subject.


Tiếp đến, chúng ta gọi hàm:




doHomework('Toán');
// Bắt đầu làm bài tập Toán.



Bây giờ, hãy thêm callback làm tham số thứ 2 của hàm doHomework().


Hàm callback sau đó được định nghĩa trong đối số thứ hai của lệnh gọi doHomework() của chúng ta.




function doHomework(subject, callback) {
    console.log(`Bắt đầu làm bài tập ${subject}.`);
    callback();
}

doHomework('math', function() {
    console.log('Làm bài tập xong!');
});



Như bạn sẽ thấy, kết quả là:



// Bắt đầu làm bài tập Toán
// Làm bài tập xong!



Nhưng hàm callback không phải lúc nào cũng được định nghĩa trong hàm gọi của chúng ta.


Chúng có thể được định nghĩa hàm callback ở nơi khác trong Javascript như thế này:




function doHomework(subjectcallback) {
    setTimeoutfunction(){
        console.log(`Bắt đầu làm bài tập ${subject}.`);
        callback();
    }, 5000);
    
}

function alertFinished(){
    console.log('Làm bài tập xong!');
}
doHomework('Toán'alertFinished);
 


Kết quả của ví dụ này hoàn toàn giống với ví dụ trước, nhưng thiết lập hơi khác một chút.



// Bắt đầu làm bài tập Toán
// Làm bài tập xong!



Như bạn có thể thấy, chúng ta đã chuyển định nghĩa hàm alertFinished() làm đối số trong lệnh gọi hàm doHomework().


Đây là một phương thức rất phổ biến trong lập trình web / lập trình JavaScript. Nhưng cẩn thận callback hell bạn nhé. :D


> Tham khảo ngay KHÓA HỌC REACT (3 tháng) nếu bạn muốn đi chuyên sâu về JavaScript


> Hoặc KHÓA HỌC LẬP TRÌNH FULL STACK (12 tháng) nếu như bạn muốn trở thành một lập trình viên Full Stack. Học bài bản hơn, lộ trình rõ ràng hơn với chuyên gia doanh nghiệp.


Đây chưa phải tất cả về Callback function trong Javascript!



Bây giờ, qua ví dụ bên trên, có thể bạn đã hiểu callback là gìcách hàm callback hoạt động trong Javascript.




Nhưng đây chỉ là phần nổi của tảng băng của hàm callback, vẫn còn rất nhiều điều để tìm hiểu!


Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, vui để lại bình luận ở bên dưới nhé.



Source: https://www.sitepoint.com/callbacks-javascript/


---

HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI

Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0383.180086
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #icthanoi #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp

Bình luận Facebook
Khóa học liên quan đến bài viết

KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS

56 giờ
Học Lập trình Front end hiện đại với ReactJS. Học làm chủ HTML, CSS, JS và thư viện JavaScript phổ biến nhất hiện nay. Sẵn sàng đi thực tập / đi làm ngay sau khóa học.

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate

KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)

48 giờ
Khóa học Angular & TypeScript (Front end) sẽ giúp bạn làm chủ được nền tảng Angular từ đó phát triển được các ứng dụng mạnh mẽ, đa nền tảng.
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!