0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hiểu Về Hàm JavaScript - Hướng Dẫn Đầy Đủ

Đăng vào 7 tháng trước

• 5 phút đọc

Hiểu Về Hàm JavaScript - Hướng Dẫn Đầy Đủ

JavaScript là một ngôn ngữ lập trình linh hoạt và rất phổ biến, được sử dụng để xây dựng mọi thứ từ các trang web đơn giản đến các ứng dụng web phức tạp. Hàm trong JavaScript là phần cốt lõi trong logic và cấu trúc của ngôn ngữ này. Trong bài viết này, chúng ta sẽ tìm hiểu các khía cạnh khác nhau của hàm trong JavaScript, từ cách khai báo cơ bản đến các chủ đề nâng cao như đệ quy và closure.

Mục Lục

  1. Khai Báo Hàm Cơ Bản
  2. Hàm Mũi Tên
  3. Biểu Thức Hàm Gọi Ngay (IIFE)
  4. Đối Tượng Arguments
  5. Phạm Vi và Ngăn Xếp Hàm
  6. Đệ Quy
  7. Phạm Vi Từ Khóa
  8. Closure
  9. Hàm Tích Hợp Sẵn
  10. Kết Luận

Khai Báo Hàm Cơ Bản

Hàm trong JavaScript là một khối mã có thể tái sử dụng thực hiện một nhiệm vụ cụ thể. Dưới đây là một ví dụ cơ bản về hàm nhân hai số:

javascript Copy
function multiply(a, b) {
  b = typeof b !== "undefined" ? b : 1;
  return a * b;
}

console.log(multiply(5)); // Kết quả: 5

Giải Thích

  • Hàm multiply nhận hai tham số ab.
  • Nếu b không được cung cấp, nó mặc định là 1.
  • Kết quả là tích của ab.

Đây là cách thông thường để xử lý các tham số mặc định trước ES6.

Hàm Mũi Tên

Hàm mũi tên được giới thiệu trong ES6 cung cấp cú pháp ngắn gọn hơn để định nghĩa hàm.

Ví Dụ:

javascript Copy
const sayHello = () => {
    console.log(`Xin chào từ Hàm Mũi Tên!`);
};

sayHello(); // Kết quả: Xin chào từ Hàm Mũi Tên!

Tại Sao Nên Sử Dụng Hàm Mũi Tên?

  • Giảm thiểu mã lặp lại.
  • Không ràng buộc this, điều này làm cho chúng lý tưởng cho các callback.

Biểu Thức Hàm Gọi Ngay (IIFE)

IIFE là một hàm được thực thi ngay sau khi nó được định nghĩa.

Ví Dụ:

javascript Copy
(async () => {
    const x = 1;
    const y = 9;
    console.log(`Xin chào, Đáp Án là ${x + y}`);
})();

Tại Sao Nên Sử Dụng IIFE?

  • Tạo ra một phạm vi riêng tư.
  • Tránh ô nhiễm không gian tên toàn cục.
  • Hữu ích cho các tác vụ bất đồng bộ.

Đối Tượng Arguments

Trong mỗi hàm không phải hàm mũi tên, JavaScript cung cấp một đối tượng arguments chứa tất cả các đối số được truyền vào hàm.

Ví Dụ:

javascript Copy
function greet() {
    console.log(arguments[0], arguments[1]);
}

greet('Xin chào', 'Thế giới'); // Kết quả: Xin chào Thế giới

Lưu Ý

  • Nó giống như một mảng nhưng không phải là một mảng thực sự.
  • Trong mã hiện đại, hãy sử dụng tham số rest thay thế: function greet(...args) {}.

Phạm Vi và Ngăn Xếp Hàm

Phạm Vi

Phạm vi xác định nơi một biến hoặc hàm có thể được truy cập.

Các Loại Phạm Vi:

  1. Phạm vi toàn cục: Có sẵn ở bất kỳ đâu trong script.
  2. Phạm vi module: Được sử dụng khi làm việc với các module ES6.
  3. Phạm vi hàm: Được định nghĩa bên trong các hàm.
  4. Phạm vi khối: Được định nghĩa bên trong dấu ngoặc nhọn {} như vòng lặp hoặc điều kiện.

Ngăn Xếp Hàm (Call Stack)

Ngăn xếp hàm theo dõi hàm nào đang thực thi và nơi nó được gọi từ. Nó giúp động cơ JavaScript quản lý các cuộc gọi hàm lồng nhau.

Đệ Quy

Đệ quy là khi một hàm gọi chính nó để giải quyết các trường hợp nhỏ hơn của cùng một vấn đề.

Ví Dụ:

javascript Copy
function factorial(n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

console.log(factorial(5)); // Kết quả: 120

Khái Niệm Quan Trọng

  • Luôn bao gồm một trường hợp cơ bản để ngăn chặn đệ quy vô hạn.

Phạm Vi Từ Khóa

Môi trường từ khóa xác định ngữ cảnh trong đó một hàm được tạo ra. Nó xác định cách các biến được giải quyết.

Closure

Closure cho phép một hàm truy cập các biến từ phạm vi bao quanh của nó, ngay cả sau khi hàm ngoài đã trở về.

Ví Dụ:

javascript Copy
function outer() {
    let counter = 0;
    return function inner() {
        counter++;
        console.log(counter);
    };
}

const increment = outer();
increment(); // Kết quả: 1
increment(); // Kết quả: 2

Tại Sao Closure Quan Trọng?

  • Chúng giúp quản lý trạng thái.
  • Được sử dụng rộng rãi trong xử lý sự kiện, callback và các mẫu bảo mật dữ liệu.

Hàm Tích Hợp Sẵn

JavaScript cung cấp nhiều hàm và phương thức tích hợp sẵn giúp đơn giản hóa các tác vụ:

  • parseInt(): Chuyển đổi chuỗi thành số nguyên.
  • setTimeout(): Trì hoãn việc thực thi hàm.
  • Math.random(): Tạo ra số ngẫu nhiên.
  • Các phương thức tích hợp cho Array, String, Date như .map(), .filter(), .slice() để thao tác dữ liệu.

Ví Dụ:

javascript Copy
console.log(Math.random()); // Xuất ra một số ngẫu nhiên giữa 0 và 1

Kết Luận

Hiểu biết về hàm là điều cần thiết để làm chủ JavaScript. Từ các định nghĩa cơ bản đến các khái niệm nâng cao như đệ quy và closure, hàm giúp bạn viết mã hiệu quả, dễ bảo trì và mạnh mẽ. Việc học các chủ đề này một cách thấu đáo sẽ giúp bạn nổi bật hơn trong vai trò là một lập trình viên JavaScript và có thể giải quyết các vấn đề trong thế giới thực một cách tự tin.

Chúc bạn lập trình vui vẻ!

Nếu bạn đã từng gặp khó khăn với các tác vụ lặp đi lặp lại, các lệnh khó hiểu, hoặc những cơn đau đầu khi gỡ lỗi, nền tảng này sẽ giúp cuộc sống của bạn dễ dàng hơn. Nó là miễn phí, mã nguồn mở và được xây dựng dành riêng cho các lập trình viên.

👉 Khám phá các công cụ: FreeDevTools
👉 Đánh dấu repo: freedevtools

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào