Hướng dẫn nested closures javascript - javascript đóng cửa lồng nhau
Đã đăng vào thg 5 25, 2017 9:37 SA 2 phút đọc 2 phút đọc Nested functionTrong Javascript, bạn có thể lồng 1 hàm bên trong 1 hàm khác. Tất cả các biến (variables) cũng như đối số (arguments ) từ hàm cha (outer function) đều được "kế thừa" từ hàm con (inner function). Nói cách khác, Inner function chứa Scope của outner function.Trong khi đó outer function không thể sử dụng được các biến (variables) cũng như đối số (arguments) của inner function . Code exampleScope của outner function.Trong khi đó outer function không thể sử dụng được các biến (variables) cũng như đối số (arguments) của inner function . Code example
Cùng giải thích 1 chút nhé:Trong hàm outside (outner function) ta có định nghĩa 1 hàm inside() , hàm này làm nhiệm vụ đơn giản là trả về tổng của 2 số - 1 tham số được truyền vào từ outner function, 1 tham số được truyền vào từ chính inner function . Cuối cùng, hàm outside sẽ trả về 1 hàm return inside;return inside; Closures
Trong Javascript, một Closure sẽ chứa function và những biến mà được khai báo trong tầm vực của function như mình đã nói ở trên. Trong đoạn code ở trên, khi chúng ta khai báo inner function, Javascript sẽ tạo một Closure và cho function đó cũng như tất cả các biến mà function đó truy xuất vào. Vì thế khi chúng ta gọi function được trả về từ function ‘pet’ nó vẫn có thể truy xuất được dữ liệu của biến ‘name’. Trên đây, là 1 chút chia sẻ mà mình biết được về nested function cũng như closure trong Javascript, Rất mong nhận được sự góp ý của mọi người Nguồn tham khảo: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Functions https://developer.mozilla.org/en/docs/Web/JavaScript/Closures#Closure https://codeaholicguy.com/2015/12/31/javascript-closures/ Nguồn tham khảo: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Functions https://developer.mozilla.org/en/docs/Web/JavaScript/Closures#Closure https://codeaholicguy.com/2015/12/31/javascript-closures/All rights reserved Đã đăng vào thg 11 25, 2017 9:57 SA 4 phút đọc 4 phút đọc Closure là gì ?Closure là một khía cạnh quan trọng của Javascript mà các lập trình viên nên biết, bài viết hôm nay chúng ta cùng tìm hiểu những điều cơ bản về Closure, cách thức hoạt động của Closure trong Javascript. Chúng ta sẽ bắt đầu bằng cách xem xét hai định nghĩa về Closure: Định nghĩa #1
Định nghĩa #2
Đầu tiên chúng ta cần tìm hiểu phạm vi (scope) trong Javascript. Phạm vi (scope) về cơ bản là tuổi thọ của một biến trong Javascript, nơi mà một biến được định nghĩa đóng một vai trò trong bao lâu và những chức năng (functions) trong chương trình có quyền truy cập nó. Ví dụ:Khi tạo một hàm trong Javascript, nó có quyền truy cập các biến được tạo bên trong và bên ngoài hàm. Các biến được tạo bên trong một hàm là các biến được định nghĩa cục bộ. Một biến địa phương (local variable) chỉ có thể được truy cập trong phạm vi chức năng mà nó được định nghĩa. Trong ví dụ dưới đây, bạn sẽ thấy rằng nếu chúng ta cố gắng lấy giá trị của 3 ngoài chức năng (function) chúng ta nhận được một lỗi tham chiếu. Đó là bởi vì các từ là một biến địa phương:
Tương phản với ví dụ này nơi chúng ta định nghĩa 3 trong phạm vi toàn cầu (global scope). Điều này có nghĩa là nó có thể truy cập tới cả trong và ngoài hàm (function):
Nested FunctionsĐiều gì xảy ra khi chúng ta viết một hàm bên trong một hàm khác? Chúng ta cùng xem ví dụ sau để biết nhé : Đầu tiên tạo một hàm có tên 5. 6 sẽ trả về một hàm tên 7. Và cuối cùng hàm 7 hiển thị giá trị biến 3 ra màn hình console, trong trường hợp này có nghĩa là nó ghi 0' vào giao diện điều khiển. : Đầu tiên tạo một hàm có tên 5. 6 sẽ trả về một hàm tên 7. Và cuối cùng hàm 7 hiển thị giá trị biến 3 ra màn hình console, trong trường hợp này có nghĩa là nó
ghi 0' vào giao diện điều khiển.
Chúng ta tạo ra một biên và gán nó cho hàm 5:
Bây giờ chúng ta có thể thấy giá trị của 2 bằng cách gọi biến nhưng không gọi hàm bên trong:
Như mong đợi, 2 đang tham chiếu chức năng bên trong (inner function) của hàm 5. Điều này có nghĩa là nếu chúng ta chạy 5 trong giao diện điều khiển (console), nó sẽ gọi và chạy hàm 6:
Nó hoạt động! Nhưng đây không phải là điều đặc biệt. Hãy di chuyển một dòng mã và xem những gì thay đổi. Hãy xem ví dụ dưới đây. Tôi đã di chuyển khai báo của chúng ta chuyển biến 3 ra bên ngoài hàm 8 và bên trong hàm 9:
Giống như trước, khai báo một biến và gán nó cho chức năng 5 của chúng ta:
Bây giờ chúng ta sẽ xem xét biến 2 của chúng ta đang tham chiếu: 0Không có định nghĩa biến 3. Vậy điều gì sẽ xảy ra khi chúng ta gọi hàm?
Nó vẫn đúng. Và đó là bởi vì bạn vừa trải qua những ảnh hưởng của một Closure. Trong trường hợp này, phạm vi chức năng của 9 của chúng ta đã đóng. Điều này có nghĩa là các biến 4 cũng nên kết thúc. Tuy nhiên, trong JavaScript chúng ta có khái niệm nhỏ được gọi là Closure: chức năng bên trong của chúng ta duy trì một tham chiếu đến phạm vi mà nó đã được tạo ra. Điều này cho phép hàm 5 vẫn truy cập vào các biến từ - ngay cả sau khi 9 đã đóng.
Trên đây là phần giới thiệu cơ bản về Closure và cách thức hoạt động của một Closure trong Javascript. All rights reserved |