Scope trong ngôn ngữ lập trình là một khái niệm quy định phạm vi hợp lệ và thời gian tồn tại của các biến và tham số. Đây là một khái niệm quan trọng giúp người lập trình quản lý xung đột tên và quản lý bộ nhớ hiệu quả.

Phạm vi cục bộ (local): các biến được khai báo trong hàm, có tác dụng trong hàm và sẽ được giải phóng khi hàm thực thi xong. Ví dụ:


function myFunction() {

var a = 4; // biến cục bộ a chỉ tồn tại trong phạm vi hàm

return a * a; // 16

}

Phạm vi toàn cục (global): biến được khai báo phạm vi toàn cục có thể được sử dụng bởi mọi hàm hay mọi vị trí trong trang. Các biến toàn cục thường gắn liền với đối tượng window – cửa sổ trình duyệt và sẽ được giải phóng khi cửa sổ trang đóng. Ví dụ:


var a = 4; // biến toàn cục

function myFunction() {

return a * a; // 16

}

Các hàm lồng nhau: khi các hàm lồng nhau, phạm vi các biến có thể được thể hiện qua ví dụ sau:


var foo = function () {

var a = 3, b = 5;

var bar = function () {

var b = 7, c = 11;

// Tại phạm vi này: a = 3 (khai báo mức hàm foo), b = 7 (biến cục bộ // của hàm bar),  c = 11 (biến cục bộ của hàm bar)

a += b + c; // a = 21

// Tại phạm vi này: a = 21, b = 7 (biến cục bộ // của hàm bar),  c = // 11 (biến cục bộ của hàm bar)

};

// Tại phạm vi này a = 3, b = 5,  c chưa định nghĩa (c ở trên chỉ tồn // tại trong hàm bar và sẽ bị huỷ khi ra khỏi bar)

bar();

// Tại đây: a = 21, b = 5

};

Hầu hết các ngôn ngữ lập trình hiện đại (C, C#, Java) đều có phạm vi block (các lệnh được đặt trong cặp ngoặc nhọn {}), tức là các biến được định nghĩa trong block sẽ được giải phóng khi ra khỏi block. Tuy nhiên, trong JavaScript không có phạm vi block. Ví dụ:


function myFunction() {

var  a = 3;// biến phạm vi hàm

{// bắt đầu block

var  b = 5; biến phạm vi block

}// kết thúc block

return a + b; // 8, b vẫn được hiểu ở ngoài block

}

Trong JavaScript hỗ trợ phạm vi hàm (như ví dụ trên về hàm foo và bar) và vì không hỗ trợ phạm vi block nên lời khuyên của các chuyên gia sẽ là khai báo biến ngay tại đỉnh hàm. Xem lại hàm myFunction, việc khai báo a và b cùng phạm vi hàm hay – như ví dụ trên – a phạm vi hàm, b phạm vi block có ý nghĩa như nhau.

< Hàm (functions)