THÔNG DỤNG
OOP
ES6
ES(X)
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Anonymous function trong javascript

Trong Javascript chúng ta có thể khai báo hàm theo cú pháp chuẩn của nó, hoặc sử dụng Closure function, hoặc trong ES6 thì sử dụng Arrow function. Nhưng bạn có biết chúng ta có một cách khai báo hàm nữa rất hay đó là Anonymous functions.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Anonymous functions là gì?

Anonymous functions hay còn gọi là hàm ẩn danh, là một hàm được sinh ra đúng vào thời điểm chạy của chương trình. Thông thường khi bạn khai báo một hàm thì trình biên dịch sẽ lưu lại trong bộ nhớ nên bạn có thể gọi ở trên hay dưới vị trí khai báo hàm đều được, nhưng với anonymous functions thì nó sẽ được sinh ra khi trình biên dịch xử lý tới vị trí của nó.

Anonymous functions được khai báo bằng cách sử dụng toán tử thay vì sử dụng cú pháp định nghĩa hàm thông thường. Xét ví dụ cách khai báo hàm thông thường dưới đây:

 

Bài viết này được đăng tại [free tuts .net]

function showDomain()
{
    alert('Học Javascript tại Freetuts.net');
}

// Gọi hàm
showDomain();

 

Nhưng nếu bạn khai báo bằng cách sử dụng hàm ẩn danh (anonymous function) thì cú pháp sẽ như sau:

 

var showDomain = function()
{
    alert('Học Javascript tại Freetuts.net');
};

// Gọi hàm
showDomain();

 

Nghĩa là bạn sẽ sử dụng toán tử = để khai báo hàm ẩn danh và gán nó vào đối tượng showDomain.

2. Anonymous functions được khởi tạo tại thời điểm chạy

Như ở trên mình có trình bày, anonymous được khởi tạo tại thời điểm chương trình chạy, điều này khác hoàn toàn với hàm được định nghĩa bài bản. 

Xét ví dụ với cách tạo hàm bình thường dưới đây: XEM DEMO

 

// gọi trước hàm
showDomain(); // hoạt động

function showDomain()
{
    alert('Học Javascript tại Freetuts.net');
}

// gọi sau hàm
showDomain(); // hoạt động

 

Trong ví dụ này cho dù bạn gọi hàm ở phía trên hay dưới đều hoạt động tốt là vì chương trình đã lưu hàm đó vào bộ nhớ. Nhưng nếu ta sử dụng anonymous function như ví dụ dưới đây sẽ bị lỗi ngay.

 

// gọi trước hàm
showDomain(); // Lỗi vì hàm này chưa tồn tại

var showDomain = function()
{
    alert('Học Javascript tại Freetuts.net');
};

// gọi sau hàm
showDomain(); // hoạt động vì hàm đã tồn tại

 

3. Anonymous function là hàm không tên

Điều này nghe hơi lạ vì làm thế nào để gọi đến một hàm mà nó lại không có tên? Với các tạo thông thường thì ta phải có tên hàm, còn với anonymous thì bạn có thể sử dụng tên biến để thay thế cho tên hàm, hoặc bạn có thể sử dụng hàm call() để invoke (thực thi).

 

(function(){
    alert('freetuts.net');
}).call(this);

 

Với hàm không tên bạn phải bao quanh bằng cặp () thì mới sử dụng hàm call được.

Nếu bạn cố tình gán tên hàm vào trong anonymous function thì tên đó sẽ không tồn tại, ví dụ:

 

var demo = function test()
{
    alert('freetuts.net');
};
demo(); // dúng
test(); // sai vì test không tồn tại

 

4. Anonymous function có hữu ích hay không?

Tùy vào từng trường hợp mà anonymous function rất hữu ích, nếu bạn cần một function ngay tại một thời điểm thì nó rất hữu ích, hoặc bạn muốn thực hiện một callback function thì nó cũng rất hữu ích.

Ví dụ: sử dụng callback function

 

function caller(func)
{
    func();
}

caller(function(){
    alert('Hàm callback');
});

 

5. Lời kết

Nếu bạn học sâu vào Javascript hoặc tìm hiểu các thư viện, framework nổi tiếng hiện nay như Angular, NodeJS thì sẽ thấy anonymous function được sử dụng rất nhiều, chính vì vậy việc hiểu bản chất của hàm này sẽ giúp bạn rất nhiều.

Cùng chuyên mục:

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

4 cách tránh memory leaks trong JavaScript

4 cách tránh memory leaks trong JavaScript

Capturing và bubbling Event trong Javascript

Capturing và bubbling Event trong Javascript

Phân biệt prototype và __proto__ trong JavaScript

Phân biệt prototype và __proto__ trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Cách khắc phục lỗi

Cách khắc phục lỗi "hoisting" trong JavaScript

Sử dụng Promise.all và Promise.race để quản lý các Promise trong JavaScript

Sử dụng Promise.all và Promise.race để quản lý các Promise trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Cách sử dụng Async functions trong JavaScript

Cách sử dụng Async functions trong JavaScript

Hàm String isspace() trong Python

Hàm String isspace() trong Python

Cách tạo số ngẫu nhiên trong Javascript

Cách tạo số ngẫu nhiên trong Javascript

Hướng dẫn cách tạo một số ngẫu nhiên ...

Cách gộp hai object javascript lại với nhau

Cách gộp hai object javascript lại với nhau

Cách lấy chiều dài của object trong Javascript

Cách lấy chiều dài của object trong Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Cách dùng nextSibling trong javascript

Cách dùng nextSibling trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng innerHTML trong Javascript

Cách dùng innerHTML trong Javascript

Top