Thắc mắc cú pháp javascript

Mình đọc trên mạng thấy đoạn code thế này nhưng ko rõ nên hiểu nó thế nào: tại sao phải viết thế, làm thế nào để return? Mong các cao thủ chỉ giáo.

(async function loop() {
//
})(param);

7 Likes

mình ko có hỏi về async await, mình hỏi về cái cú pháp:
(function loop() {
})(param);

tại sao 1 function lại đặt trong (), sau đó mới lại truyền param ở dấu đóng mở ngoặc phía sau?

1 Like

Cái đó gọi là IIFE (Immediately Invoked Function Expressions), bạn tham khảo thêm trong bài viết này:

4 Likes

Cái đó gọi là Immediately Invoked Function Expression

  • Function này sẽ được thực thi ngay kia file js được nạp
  • IIFE như một cái bao code bên trong lại, nên giá trị bên trong đó không ảnh hưởng đến bên ngoài
var a = 'Hello';

(function() {
   var a = 'Halo';
   console.log(a); // Halo
})();

console.log(a); // Hello

Vậy muốn truyền biến bên ngoài vào thì làm sao?
Dấu ngoặc bên trong function là chỉ access bên trong IIFE nên không thể access từ bên ngoài, vậy ta dùng dấu ngoặc cuối để truyền giá trị từ ngoài vào

Một trong những công dụng của IIFE là bạn có thể tạo các function tự chạy (như plugin js cho các component như slider)

5 Likes

"tại sao 1 function lại đặt trong (), sau đó mới lại truyền param ở dấu đóng mở ngoặc phía sau? "
cấu trúc thực thi function trong js nó như vậy, trong C++ cũng có cấu trúc tương tự thực thi hàm.

  • Ý nghĩa thì nó đã load toàn bộ block lệnh function express vào vùng nhớ RAM rồi biên dịch sẵn >< function express chỉ là một block lệnh chưa được biên dịch.
    (tương tự hoàn toàn gọi thực thi function OOP trong C++).
1 Like

Đơn giản là: Viết hảm => Gọi hàm (có thể truyền tham số)

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?