Function scope
Các biến được định nghĩa bên trong hàm không thể được truy cập từ ngoài hàm. Một hàm được định nghĩa bên trong một hàm khác có thể truy cập tất cả các biến được định nghĩa trong hàm cha của nó.
Ví dụ về hàm add()
là hàm con của hàm getScore()
. Hàm add()
này có thể truy cập được các biến của hàm getScore()
.
|
|
Trùng tên biến trong hàm
Tên biến trong hàm được ưu tiên từ hàm con tới hàm cha, từ trong ra ngoài. Tính chất này được gọi là scope chain.
|
|
Closure
Closure là một trong những tính năng mạnh mẽ nhất của JavaScript. Closure cũng chính là tính năng function scope.
- Hàm cha lại không truy cập được các biến trong hàm con (tính chất bao đóng)
- Hàm con được sử dụng các biến của hàm cha (các biến này được gọi là môi trường của hàm con)
- Khi hàm cha thực thi xong thì các biến bên trong vẫn chưa được xóa đi. Chúng vẫn được lưu trữ cho hàm con sử dụng.
Closure có thể là tính năng của Javascript. Cũng một số tài liệu khác nói là closure là hàm mà lưu giữ lại các giá trị biến bên ngoài của hàm đó, ngay cả khi hàm bên ngoài đã thực thi xong.
Ví dụ sau tạo tên con vật với hàm setName
và getName
. Lưu ý khi chạy xong hàm createPet()
, biến name
trong hàm này vẫn tồn tại.
|
|
Biến name
không thể được truy cập bên ngoài, tuy nhiên chúng ta có thể viết các hàm để truy cập chúng. Đây gọi là tính bao đóng (encapsulation).
Ví dụ khác với hàm trả về api code:
|
|
Trong ví dụ trên chúng ta chỉ có thế nhận apiCode
chứ không thể sửa apiCode
ở bên ngoài hàm getCode
được (tính chất bao đóng).