12/08/2018, 15:00

Tìm hiểu sâu hơn về scope Javascript

Javascript có một vài khái niệm liên quan đến "Scope", không một khái niệm nào trong số chúng là dễ hiểu đối với một new JavaScript developer(JS dev), thậm chí là cả những JS dev đã có kinh nghiệm. Trong bài viết này, tôi sẽ cố gắng giải thích cặn kẽ nhất về các khái niệm liên quan đến Scope trong ...

Javascript có một vài khái niệm liên quan đến "Scope", không một khái niệm nào trong số chúng là dễ hiểu đối với một new JavaScript developer(JS dev), thậm chí là cả những JS dev đã có kinh nghiệm. Trong bài viết này, tôi sẽ cố gắng giải thích cặn kẽ nhất về các khái niệm liên quan đến Scope trong JS. Bài viết hướng tới những ai muốn tìm hiểu sâu hơn về các từ như là scope, closure, this, namespace, function scope, global scope, lexical scope and public/private scope. Hi vọng sẽ giúp ích cho các bạn khi muốn giải đáp những câu hỏi:

  • What is Scope?
  • What is Global/Local Scope?
  • What is a Namespace and how does it differ to Scope?
  • What is the this keyword and how does Scope affect it?
  • What is Function/Lexical Scope?
  • What are Closures?
  • What is Public/Private Scope?
  • How can I understand/create/do all of the above?

Trước hết, ta sẽ bắt đầu với những khái niệm cơ bản:

What is Scope?

Trong JS, scope đề cập đến ngữ cảnh hiện tại trong code của bạn. Scope có thể được xác định trên globally hoặc locally . Hiểu về scope trong js là chìa khóa để viết code chống lỗi và trở thành developer tốt hơn. Bạn sẽ hiểu được ở đâu variables/functions có thể được truy cập, có thể thay đổi scope của ngữ cảnh trong code của bạn, nói nôm na là có thể viết code nhanh hơn và dễ maintain hơn, cũng như debug dễ dàng hơn. Suy nghĩ về scope thật dễ dàng, chúng ta đang trong scope A hay scope B?

What is Global Scope?

Trước khi bạn viết một dòng code JS, bạn đang ở nơi mà chúng ta gọi là global scope. Nếu chúng ta khai báo một biến, biến đó sẽ được hiểu là biến Global:

// global scope
var name = 'Bap';

Global scope vừa là bạn tốt cũng vừa là cơn ác mộng tồi tệ đối với bạn, bạn sẽ chạy dòng code mà không có vấn đề gì với global scope (thường là đụng độ namespaces             </div>
            
            <div class=

0