JavaScript IIFE
Hiểu các chức năng từ trong ra ngoài và sau đó học cách khai thác chúng để viết mã JavaScript hiện đại, sạch sẽ là một kỹ năng quan trọng để trở thành một ninja JavaScript Show
Một trong những mẫu mã hóa thường được sử dụng với các chức năng đã có một cái tên lạ mắt cho chính nó. Biểu thức hàm được gọi ngay lập tức. Hay được gọi thân mật hơn là IIFE và được phát âm là “iffy. ” Trước khi chúng ta có thể hiểu IIFE là gì và tại sao chúng ta cần nó, chúng ta cần nhanh chóng xem xét một vài khái niệm cơ bản xung quanh các hàm JavaScript Định nghĩa hàm tự nhiênCác nhà phát triển mới sử dụng JavaScript đương nhiên cảm thấy thoải mái với cú pháp sau khi xử lý các hàm
Cách tạo hàm này được gọi là “định nghĩa hàm” hoặc “khai báo hàm” hoặc “câu lệnh hàm”. Thông thường, các nhà phát triển mới sử dụng JavaScript không gặp khó khăn khi sử dụng cú pháp này vì nó gần giống với các hàm/phương thức trong các ngôn ngữ lập trình phổ biến khác
biểu thức hàmĐây là lúc mọi thứ bắt đầu trở nên thú vị hơn trong JavaScript. Hãy xem biểu thức hàm trông như thế nào Ví dụ có vẻ đơn giản này có thể giúp bạn nâng kỹ năng JavaScript của mình lên một tầm cao mới
Dòng 1 là tầm thường để hiểu. Nhưng khi các nhà phát triển nhìn thấy dòng 2–4 lần đầu tiên, nó thường bất chấp mong đợi của họ nếu chúng đến từ các ngôn ngữ lập trình khác như Java
Bạn có thể đã sử dụng các biểu thức hàm này mà không hiểu nền tảng. Nhưng thành thạo chúng sẽ cung cấp cho bạn một số siêu năng lực JavaScript bí mật
Biểu thức hàm ẩn danhVâng, bạn đã biết chúng là gì. Ví dụ trên là một biểu thức hàm ẩn danh. Chúng ẩn danh vì chúng không có tên theo sau từ khóa hàm Biểu thức hàm được đặt tênCác biểu thức hàm có thể có tên. Cách sử dụng phổ biến và nhàm chán nhất của các biểu thức hàm được đặt tên này là với đệ quy. Đừng lo lắng nhiều về những điều này vì bạn có thể thành thạo IIFE mà không cần hiểu các biểu thức hàm được đặt tên Vì vậy, sự khác biệt ở đây là biểu thức hàm có tên “fibonacci” có thể được sử dụng bên trong biểu thức hàm đó để gọi chính nó theo cách đệ quy. (Còn nhiều thứ khác như tên hàm hiển thị trong dấu vết ngăn xếp, v.v., nhưng chúng ta đừng lo lắng về chúng trong hướng dẫn này. ) Đầy đủ. Cho tôi xem IIFE hoặc tôi sẽ rời đi ngay bây giờCảm ơn vì đã kiên nhẫn và kiên nhẫn là kỹ năng quan trọng nhất cần có để thành thạo JavaScript Bây giờ bạn đã học các định nghĩa hàm và biểu thức hàm, hãy đi sâu vào thế giới bí mật của IIFE. Họ đến trong một vài biến thể phong cách. Trước tiên hãy xem một biến thể thực sự, rất dễ hiểu Đó là những người bạn của tôi, là IIFE thân yêu của chúng ta đang hoạt động. Khi bạn sao chép mã này và thử trong bảng điều khiển của trình duyệt, bạn sẽ thấy cảnh báo từ mã trên dòng 2. Và đó là khá nhiều nó. Không ai có thể nhận được thông báo này để hiển thị lại
Bây giờ hãy hiểu rằng cú pháp không trực quan. Tôi biết bạn đã phát hiện ra rằng “. ” ở dòng 1;
Biến thể phong cách ở trên có thể được sử dụng bằng cách thay thế “. ” với “+”, “-”, hoặc thậm chí là “~”. Về cơ bản, bất kỳ toán tử đơn hạng nào cũng có thể được sử dụng Bây giờ, hãy dùng thử trong bảng điều khiển. Và chơi xung quanh với IIFE với niềm vui của bạn
Một biến thể nhanh khác về điều này được hiển thị bên dưới Một lần nữa void về cơ bản là buộc hàm được coi là một biểu thức Tất cả các mẫu trên đều hữu ích khi chúng ta không quan tâm đến giá trị trả về từ IIFE Nhưng sau đó, nếu bạn muốn một giá trị trả về từ IIFE và bạn muốn sử dụng giá trị trả về đó ở nơi khác thì sao? Phong cách IIFE cổ điểnMẫu IIFE chúng ta đã thấy ở trên rất dễ hiểu. Vì vậy, tôi bắt đầu với phong cách đó trước thay vì phong cách truyền thống và được sử dụng rộng rãi khác
Đầu tiên, hãy xem một cách khác để tạo một biểu thức hàm sau đó Trong đoạn mã trên, một biểu thức hàm được đặt trong dấu ngoặc đơn ở dòng 1–3. Nó chưa phải là IIFE vì biểu thức hàm đó chưa bao giờ được thực thi. Bây giờ để chuyển đổi mã đó thành IIFE, chúng tôi có hai biến thể phong cách sau Bây giờ chúng tôi có hai IIFE đang hoạt động. Có thể rất khó để nhận ra sự khác biệt giữa Biến thể 1 và Biến thể 2. Vì vậy, hãy để tôi giải thích điều đó
Cả hai biến thể được sử dụng rộng rãi. Cá nhân tôi thích Biến thể 1 hơn. Nếu chúng ta đi vào chi tiết, thì cả hai biến thể đều hơi khác nhau về cách chúng hoạt động. Nhưng đối với tất cả các mục đích thực tế và giữ cho phần hướng dẫn vốn đã dài này trở nên ngắn gọn, tôi sẽ nói rằng bạn có thể sử dụng một trong số chúng theo ý thích của mình. (Tôi sẽ liên kết đến một bài viết trong tương lai mà tôi dự định viết về toán tử () và toán tử dấu phẩy để làm rõ các sắc thái giữa hai kiểu này. ) Hãy giải quyết vấn đề này một lần nữa bằng cách xem một ví dụ hoạt động và hai ví dụ không hoạt động. Chúng tôi sẽ bắt đầu đặt tên cho IIFE của mình từ bây giờ vì sử dụng các chức năng ẩn danh thường không bao giờ là một ý tưởng hay Bây giờ bạn đã biết tại sao cần có các dấu ngoặc đơn xung quanh biểu thức hàm để tạo thành một mẫu IIFE
IIFE và các biến riêng tưMột điều mà IIFE thực sự giỏi là khả năng tạo phạm vi chức năng cho IIFE.
Hãy xem một ví dụ Trong ví dụ này, chúng tôi đã khai báo hai biến bên trong IIFE và chúng là riêng tư đối với IIFE đó. Không ai bên ngoài IIFE có quyền truy cập vào chúng. Tương tự, chúng ta có một chức năng init mà không ai có quyền truy cập bên ngoài IIFE. Nhưng hàm init có thể truy cập các biến riêng tư đó
Khi chúng ta thấy mẫu mô-đun, tôi sẽ giải thích cách cấp quyền truy cập đặc quyền và được kiểm soát cho các biến riêng tư này cho thế giới bên ngoài IIFE. Vì vậy, hãy đọc tiếp để biết rằng ngay cả khi bạn đã cảm thấy mình là một IIFE Ninja IIFE có giá trị trả vềNếu bạn không cần giá trị trả về từ IIFE, thì bạn luôn có thể sử dụng biến thể IIFE phong cách đầu tiên mà chúng tôi đã thấy với các toán tử đơn nguyên như. , +, void, v.v.
Về cơ bản, IIFE được thực thi, tất nhiên là ngay lập tức, và sau đó giá trị trả về từ nó được gán cho biến kết quả Đây là một mẫu thực sự mạnh mẽ mà chúng ta sẽ sử dụng khi xem xét ví dụ về mẫu mô-đun IIFE với các tham sốKhông chỉ IIFE có thể trả về giá trị mà IIFE còn có thể nhận đối số khi chúng được gọi. Hãy xem một ví dụ nhanh
Đây là một mẫu thực sự mạnh mẽ và chúng ta thường thấy điều này trong mã jQuery cũng như trong các thư viện khác Trong ví dụ trên, chúng tôi đang chuyển jQuery, cửa sổ và tài liệu làm đối số cho IIFE trên dòng 3. Mã bên trong IIFE có thể gọi chúng là $, toàn cầu, tài liệu tương ứng Dưới đây là một vài ưu điểm của việc chuyển những thứ này cho IIFE
Mẫu mô-đun JavaScript cổ điểnBây giờ bạn đã thành thạo IIFE, hãy xem một ví dụ về mẫu mô-đun đặt IIFE và bao đóng trên steroid Chúng tôi sẽ triển khai một đối tượng Sequence singleton cổ điển hoạt động trơn tru mà không ai có thể vô tình làm hỏng giá trị trình tự hiện tại Chúng tôi sẽ viết mã này theo hai bước để chúng tôi hiểu những gì đang xảy ra dần dần
Bây giờ, hãy cải thiện điều này bằng cách thêm một vài hàm vào đối tượng mà chúng ta trả về
Vì biến hiện tại là riêng tư đối với IIFE, nên không ai ngoài các hàm có quyền truy cập vào nó thông qua bao đóng có thể sửa đổi hoặc truy cập biến hiện tại (Nếu bạn muốn thành thạo kỹ thuật đóng cửa, vui lòng đọc hướng dẫn tuyệt vời và lan truyền của tôi về cách đóng cửa. Học cách đóng JavaScript thông qua Luật Karma. ) Bây giờ, đó là một mẫu JavaScript thực sự mạnh mẽ mà bạn đã học. Nó kết hợp sức mạnh của cả IIFE và đóng cửa Đây là một biến thể rất cơ bản trên mẫu mô-đun. Có nhiều mẫu hơn, nhưng hầu hết tất cả chúng đều sử dụng IIFE để tạo phạm vi đóng riêng Khi bạn có thể bỏ qua dấu ngoặc đơnDấu ngoặc đơn xung quanh biểu thức hàm về cơ bản buộc hàm trở thành một biểu thức thay vì một câu lệnh Nhưng khi công cụ JavaScript rõ ràng rằng đó là một biểu thức hàm, thì về mặt kỹ thuật, chúng tôi không cần những dấu ngoặc đơn xung quanh như được hiển thị bên dưới Trong ví dụ trên, từ khóa hàm không phải là từ đầu tiên trong câu lệnh. Vì vậy, JavaScript không coi đây là một câu lệnh/định nghĩa hàm. Tương tự, có những chỗ khác mà bạn có thể bỏ dấu ngoặc khi biết đó là một biểu thức Nhưng tôi luôn thích sử dụng dấu ngoặc đơn ngay cả trong trường hợp này. Sử dụng dấu ngoặc đơn giúp cải thiện khả năng đọc bằng cách gợi ý theo phong cách cho người đọc ở dòng đầu tiên rằng hàm sẽ là IIFE. Rốt cuộc, họ không cần phải cuộn đến dòng cuối cùng của chức năng để nhận ra những gì họ vừa đọc qua là IIFE Đó là tất cả những gì cần biết về IIFE để bắt đầu sử dụng chúng trong mã của bạn. Chúng không chỉ giúp tổ chức và thể hiện mã của bạn đẹp hơn mà còn giúp bạn giảm lỗi bằng cách tránh tạo ra các toàn cầu không cần thiết. Bây giờ, bạn là một Ninja IIFE được chứng nhận Tôi thích viết những bài hướng dẫn JavaScript này. Thật thú vị khi viết chúng. Nhưng họ phải mất rất nhiều thời gian và công sức để đánh bóng và xuất bản. Nếu bạn thấy hướng dẫn này hữu ích, bạn có thể “vỗ tay” để thể hiện sự đánh giá cao của mình và giúp giới thiệu hướng dẫn này cho người khác. Vui lòng theo dõi tôi tại đây trên Medium và cả trên Twitter để nhận thông tin cập nhật bất cứ khi nào có bài viết mới được xuất bản Nếu bạn có bất kỳ suy nghĩ và ý tưởng nào về hướng dẫn này, bạn luôn có thể để lại phản hồi bên dưới. Nếu các bạn muốn mình viết về chủ đề nào khác thì cũng để lại tin nhắn nhé Bây giờ, đó là rất nhiều JavaScript, hãy hít một hơi thật sâu và tạm dừng JavaScript bằng cách đọc bài đăng mới nhất của tôi IIFE trong JavaScript là gì?IIFE (Biểu thức hàm được gọi ngay lập tức) là hàm JavaScript chạy ngay khi được xác định . Cái tên IIFE được quảng bá bởi Ben Alman trong blog của anh ấy.
Làm cách nào để gọi IIFE trong JavaScript?Chuyển đổi hàm thành IIFE . Đưa ra bất kỳ định nghĩa hàm thông thường nào, hãy đặt định nghĩa trong một cặp dấu ngoặc đơn đóng, điều này sẽ tạo Biểu thức hàm của bạn Cuối cùng, thêm một cặp dấu ngoặc đơn và dấu chấm phẩy để đánh dấu phần cuối của câu lệnh và bạn đã chuyển Hàm thông thường của mình thành IIFE Sử dụng JavaScript IIFE ở đâu?Bạn có thể sử dụng IIFE để ngăn các vấn đề về định nghĩa biến toàn cầu, biến bí danh, bảo vệ dữ liệu riêng tư và tránh xung đột khi sử dụng nhiều thư viện xuất cùng tên đối tượng.
Mã chính xác cho IIFE là gì?(function () { // viết mã js của bạn vào đây }); . (function () { // viết mã js của bạn vào đây })(); Vì vậy, ở trên được gọi là IIFE. |