Chào mọi người, lại là tôi đây, dạo này có chút việc nên ít đăng bài, hôm nay tôi sẽ chia sẻ một chút kinh nghiệm về chủ đề “bibao” nhé.
Thực ra ban đầu tôi cũng không biết “bibao” là gì đâu, nghe nó cứ chuyên ngành kiểu gì ấy. Chuyện là thế này, cách đây hai tuần, trong lúc đang “đào” code Javascript, tôi có gặp phải một đoạn code kỳ lạ. Cái hàm này nó tham chiếu đến biến bên ngoài nó, mà quái lạ là lúc hàm chạy thì cái biến kia phải “bay màu” rồi chứ nhỉ? Thế mà nó vẫn chạy ngon ơ.
- Tôi tò mò lắm, liền đi hỏi mấy ông anh làm cùng.
- Mấy ông ấy giải thích cho tôi một hồi, nào là “phạm vi hàm”, “tham chiếu”… nghe xong tôi vẫn mù mờ lắm.
- Cuối cùng, một ông anh mới bảo tôi: “Cái này gọi là ‘bibao’ đấy, chú mày tự lên mạng mà tìm hiểu đi”.
Thế là tôi bắt đầu “hành trình” tìm hiểu về “bibao”. Đọc bao nhiêu là tài liệu, xem bao nhiêu là video, càng đọc càng thấy rối. Lúc đầu tôi cứ nghĩ đơn giản là một hàm lồng trong một hàm khác, thế thôi. Nhưng không, “bibao” nó phức tạp hơn thế nhiều.
Tôi lọ mọ, thử nghiệm đủ kiểu, viết đi viết lại không biết bao nhiêu lần, cuối cùng cũng “ngộ” ra được chút ít. Đây nhé, tôi sẽ cho các bạn xem qua một ví dụ đơn giản mà tôi tự code:
Đầu tiên, tôi thử tạo hàm ngoài, trong đó có biến cục bộ, rồi lại có hàm con tham chiếu đến biến đó, cuối cùng hàm ngoài trả về hàm con:
function hamNgoai() {
let bien = 10;
function hamCon() {
*(bien);
return hamCon;
Sau đó, tôi thử gọi hàm ngoài để lấy hàm con, rồi lại gọi hàm con, không ngờ nó in ra 10 thật, ảo diệu chưa:
let hamLayRa = hamNgoai();
hamLayRa(); // In ra 10
Đấy, các bạn thấy không, dù hàm ngoài đã chạy xong, biến “bien” đáng lẽ phải bị “xóa sổ” rồi, nhưng hàm con vẫn “nhớ” được giá trị của nó. Đây chính là “bibao” đấy. Kiểu như hàm con nó “bọc” lại cái biến kia ấy, mang theo bên mình.
Tôi cũng vọc vạch, thử thay đổi giá trị biến bên ngoài từ bên trong hàm con, rồi in ra các thứ. Cảm giác như mình đang “xuyên không” vào bên trong hàm ấy, vui phết.
Sau khi “thực chiến” chán chê, tôi mới nghiệm ra: “bibao” không chỉ là một khái niệm, mà nó còn là một kỹ thuật cực kỳ hữu ích. Nhờ có “bibao”, tôi có thể tạo ra các biến “riêng tư”, đóng gói dữ liệu, tạo ra các hàm có “bộ nhớ”… Nói chung là hay ho lắm.
À, mà tôi cũng nhận ra một điều là, nếu không cẩn thận, “bibao” có thể gây ra “rò rỉ bộ nhớ” đấy nhé. Nên là dùng xong nhớ “giải phóng” nó đi, không là máy tính lag tung chảo đấy.
Tóm lại, “bibao” là một thứ khá “hack não” nhưng cũng rất thú vị. Tôi đã chia sẻ hết “bí kíp” của mình rồi đấy, hy vọng các bạn thấy hữu ích. Hẹn gặp lại trong các bài viết sau nhé!