Phân biệt call function và invoke function

Dạ cho em hỏi call function và invoke function có gì khác nhau?

console.log(myFunc());

Đây gọi là call function


Còn trường hợp này:

array.map(myFunc)

Gọi là invoke đúng không ạ?

Kiểu như mình viết lời gọi hàm cho nó thực thi trực tiếp thì gọi là call còn truyền vào kiểu callback không biết hàm myFunc sẽ được thực thi ở đâu trong map thì gọi là invoce.

Em cảm ơn nhiều ạ.

2 khái niệm này bạn học ở đâu?

Sau khi search google thì em tự hiểu như vậy ạ. Do không chắc nên em lên đây hỏi.

1 Like

Call cậu hiểu đúng rồi.
Invoke cậu có thể hiểu nó rộng hơn call. Nó chỉ:

  • Việc gọi một function nào đó một cách gián tiếp: sử dụng reflection, con trỏ hàm (hoặc bất cứ khái niệm tương đương trong ngôn ngữ cụ thể),… Cá nhân tớ hay gặp thuật ngữ đó ở các framework và functional programming (scenario cậu đưa ra nằm ở TH này, và cậu hiểu gần đúng rồi, chỉ là chính xác thời điểm gọi hàm, cậu mới gọi nó là “invoke”).
  • Việc gọi một function nào đó trực tiếp, nhưng không thích dùng từ “call” vì nghe nó phèn.
    Thi thoảng tớ gặp thuật ngữ này sử dụng thay cho “call” ở các framework. Cơ mà TH này ít gặp hơn (vì gọi luôn là call dễ hiểu hơn), nên cậu có thể hiểu đơn giản ý nghĩa của nó như TH đầu.

Hope it helps!

6 Likes

À quên phản hồi bạn, về ý nghĩa invoke với call thì library đã đề cập rồi.

Còn ví dụ trên topic thì bạn cần biết cách các lệnh chạy như thế nào:

  • VD1: Hàm myFunc chạy ra kết quả xong, lấy kết quả đó truyền vào console.log()
  • VD2: Hàm myFunc không chạy, dùng chính hàm myFunc truyền vào map()

Trước mình học JS phần gán các DOM event cũng bị confuse chỗ này. Tóm lại nếu chỗ nào có ngoặc () thì là gọi hàm lấy kết quả, còn nếu chỉ có tên hàm thôi thì là sử dụng chính hàm đó.

4 Likes

Với cá nhân mình “invoke” với “call” là giống nhau, đều chỉ mục đích là thực thi 1 function. Tuy nhiên tùy theo ngôn ngữ lập trình mà invoke hoặc(và) call được sử dụng khi thảo luận.

JS thì khá phức tạp:
fn() - directly invoke function, calling function
fn.call(), fn.apply() - in-directly invoke function, calling function
(() =>{})() - IIFE (immediate invoked function expression), calling function
new Obj() - call/invoke constructor function, create new instance (common)
proxy_obj.x - call/invoke get function

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