Câu hỏi rất hay, đây điểm quan trọng mà mình cần giải thích rõ hơn.
Bạn nói đúng, trong trường hợp thông thường, khi chúng ta khai báo một biến bằng var ở phạm vi toàn cục (global scope), nó không tự động trở thành thuộc tính của đối tượng window. Tuy nhiên, có một số điểm cần lưu ý:
Trong môi trường trình duyệt, khi khai báo biến bằng var ở phạm vi toàn cục, nó thực sự được thêm vào đối tượng window như một thuộc tính.
Trong ví dụ của chúng ta:
var status ="😎"
Biến status này sẽ trở thành window.status. Hãy thử kiểm tra nó trên Console của trình duyệt nhé:
Điều này khác với việc sử dụng let hoặc const, vốn không tạo ra thuộc tính trên đối tượng window.
Trong ngữ cảnh của setTimeout, this thường trỏ đến đối tượng window (trong trình duyệt).
Vì vậy, khi chúng ta gọi data.getStatus.call(this), this đang trỏ đến window, và window.status thực sự có giá trị "😎".
Cảm ơn bạn đã chỉ ra điểm này. Đây là một ví dụ tốt về sự phức tạp của JavaScript và tầm quan trọng của việc hiểu rõ cách ngôn ngữ hoạt động trong các ngữ cảnh khác nhau.
Thường thì bạn sẽ không nên dùng var nếu chưa thực sự hiểu rõ về scope của nó.
Em cảm ơn anh đã bỏ thời gian ra chia sẻ những bài viết có ích như thế này. Em có một thắc mắc mong anh giải đáp: "Trong global context, this trỏ đến global object (trong trình duyệt là window), và status global là "😎". ". Em tưởng là this trỏ đến obj window -> nhưng thuộc tính window.status chưa đc định nghĩa (biến status="😎" không phải là của obj window) -> kết quả là undefined
Miễn phí thì không hoàn toàn nhé, ví dụ nếu code C# thì các gói extension vẫn duy trì license như bên visual studio, không miễn phí cho các cty có doanh thu trên 1m USD
@refacore vì em có dùng php ở trong nên dùng nginx làm webserver đứng trước á bác. Vì traefik không dùng trực tiếp với php được, hoặc em chưa tìm được cấu hình đúng
Đúng ra hệ thống của bạn không cần nginx cũng được vì mình thấy con Traefik kia cũng đủ vai trò trong việc cân bằng tải và đưa port TCP của ứng dụng thành port HTTP rồi
Có thể dùng trực tiếp Traefik + php mà không cần thông qua 1 thằng webserver được à anh
THẢO LUẬN
Cảm ơn bạn, mình đã làm được
👍️🌴🌴
Great Job a ! 👍️
Cảm ơn @spaghetti-lover nhé.
Câu hỏi rất hay, đây điểm quan trọng mà mình cần giải thích rõ hơn.
Bạn nói đúng, trong trường hợp thông thường, khi chúng ta khai báo một biến bằng
var
ở phạm vi toàn cục (global scope), nó không tự động trở thành thuộc tính của đối tượngwindow
. Tuy nhiên, có một số điểm cần lưu ý:Trong môi trường trình duyệt, khi khai báo biến bằng
var
ở phạm vi toàn cục, nó thực sự được thêm vào đối tượngwindow
như một thuộc tính.Trong ví dụ của chúng ta:
Biến
status
này sẽ trở thànhwindow.status
. Hãy thử kiểm tra nó trên Console của trình duyệt nhé:Điều này khác với việc sử dụng
let
hoặcconst
, vốn không tạo ra thuộc tính trên đối tượngwindow
.Trong ngữ cảnh của
setTimeout
,this
thường trỏ đến đối tượngwindow
(trong trình duyệt).Vì vậy, khi chúng ta gọi
data.getStatus.call(this)
,this
đang trỏ đếnwindow
, vàwindow.status
thực sự có giá trị "😎".Cảm ơn bạn đã chỉ ra điểm này. Đây là một ví dụ tốt về sự phức tạp của JavaScript và tầm quan trọng của việc hiểu rõ cách ngôn ngữ hoạt động trong các ngữ cảnh khác nhau.
👍️👍️👍️
Hay quá anh ơi, ra tiếp cách làm với Literal.club chia sẽ sách đang đọc đi anh
Đúng nè , App banking không có refresh Token
Em cảm ơn anh đã bỏ thời gian ra chia sẻ những bài viết có ích như thế này. Em có một thắc mắc mong anh giải đáp: "Trong global context, this trỏ đến global object (trong trình duyệt là window), và status global là "😎". ". Em tưởng là this trỏ đến obj window -> nhưng thuộc tính window.status chưa đc định nghĩa (biến status="😎" không phải là của obj window) -> kết quả là undefined
Cảm ơn bạn đã quan tâm, bạn có thể xem thêm bài viết mới tại https://viblo.asia/p/dns-va-route-53-tren-aws-phan-2-cac-khai-niem-co-ban-ve-route-53-aNj4vbx246r nha
Cảm ơn bạn nhé😘
Miễn phí thì không hoàn toàn nhé, ví dụ nếu code C# thì các gói extension vẫn duy trì license như bên visual studio, không miễn phí cho các cty có doanh thu trên 1m USD
Bro,
@refacore vì em có dùng php ở trong nên dùng nginx làm webserver đứng trước á bác. Vì traefik không dùng trực tiếp với php được, hoặc em chưa tìm được cấu hình đúng
viết gì ngay từ đầu đã khó hiểu
) anh mắc xoăn còn không dám pub multimodal vào EU
Mark: "Trust me bro, the data is legal"
👍️
em bị lỗi này khi chạy cicd pipeline ạ
nginx ở đây chưa rõ vai trò. Khả năng cao là host Single page app. Nếu thế thì ko bỏ đi đc.
Anh cho em hỏi chỗ này ạ:
Có thể dùng trực tiếp Traefik + php mà không cần thông qua 1 thằng webserver được à anh