1. Trong một số ngôn ngữ lập trình, có khái niệm phạm vi của module (module scope). Điều này có nghĩa là gì?
A. Biến chỉ có thể truy cập trong một hàm cụ thể của module. Kết luận Lý giải.
B. Biến chỉ có thể truy cập trong phạm vi của tệp mã nguồn đó (module), và thường cần được export để các module khác có thể sử dụng. Kết luận Lý giải.
C. Biến có phạm vi toàn cục cho toàn bộ ứng dụng. Kết luận Lý giải.
D. Biến chỉ tồn tại trong một lần chạy của module. Kết luận Lý giải.
2. Phạm vi của biến toàn cục (global scope) cho phép biến đó được truy cập và sử dụng ở những vị trí nào trong chương trình?
A. Chỉ trong hàm hoặc khối mã mà nó được khai báo lần đầu. Kết luận Lý giải.
B. Trong bất kỳ hàm hoặc khối mã nào trên toàn bộ chương trình. Kết luận Lý giải.
C. Chỉ trong các hàm được gọi trực tiếp từ phạm vi toàn cục. Kết luận Lý giải.
D. Trong phạm vi của tệp mã nguồn hiện tại, nhưng không thể truy cập từ các tệp khác. Kết luận Lý giải.
3. Khi so sánh phạm vi hàm (function scope) và phạm vi khối (block scope), điểm khác biệt chính là gì?
A. Phạm vi hàm chỉ áp dụng cho toàn bộ hàm, còn phạm vi khối chỉ áp dụng cho một câu lệnh. Kết luận Lý giải.
B. Phạm vi hàm giới hạn biến trong toàn bộ hàm, trong khi phạm vi khối giới hạn biến trong một khối mã cụ thể (ví dụ: vòng lặp for, if). Kết luận Lý giải.
C. Phạm vi hàm cho phép truy cập biến từ bên ngoài hàm, còn phạm vi khối không cho phép. Kết luận Lý giải.
D. Không có sự khác biệt đáng kể, cả hai đều giới hạn biến trong một khu vực mã nhất định. Kết luận Lý giải.
4. Trong một chương trình, nếu một biến được khai báo bên ngoài bất kỳ hàm hoặc khối mã nào, nó thường có phạm vi là gì?
A. Phạm vi cục bộ của hàm gần nhất. Kết luận Lý giải.
B. Phạm vi toàn cục. Kết luận Lý giải.
C. Phạm vi của tệp mã nguồn. Kết luận Lý giải.
D. Phạm vi chỉ tồn tại trong một dòng mã. Kết luận Lý giải.
5. Trong một chương trình có nhiều tệp mã nguồn (files), phạm vi của biến toàn cục khai báo trong một tệp có thể bị giới hạn như thế nào?
A. Biến toàn cục luôn có thể truy cập được từ tất cả các tệp. Kết luận Lý giải.
B. Phạm vi có thể bị giới hạn ở cấp độ tệp (file scope) hoặc module, tùy thuộc vào ngôn ngữ lập trình và cách khai báo (ví dụ: sử dụng từ khóa static trong C/C++). Kết luận Lý giải.
C. Chương trình sẽ tự động tạo bản sao của biến cho mỗi tệp. Kết luận Lý giải.
D. Biến toàn cục chỉ có thể truy cập được trong tệp mà nó được khai báo, không bao giờ từ tệp khác. Kết luận Lý giải.
6. Khi một biến được khai báo bên trong một hàm, nó thường được gọi là biến có phạm vi nào?
A. Phạm vi toàn cục (Global scope). Kết luận Lý giải.
B. Phạm vi cục bộ (Local scope). Kết luận Lý giải.
C. Phạm vi của lớp (Class scope). Kết luận Lý giải.
D. Phạm vi của module (Module scope). Kết luận Lý giải.
7. Trong một số ngôn ngữ lập trình, từ khóa như global (ví dụ trong PHP) được sử dụng để làm gì liên quan đến phạm vi của biến?
A. Để khai báo một biến chỉ có thể sử dụng trong một khối mã cụ thể. Kết luận Lý giải.
B. Để cho phép một hàm truy cập và sửa đổi một biến toàn cục, thay vì tạo ra một biến cục bộ mới cùng tên. Kết luận Lý giải.
C. Để định nghĩa một biến có phạm vi chỉ trong tệp mã nguồn. Kết luận Lý giải.
D. Để chỉ định biến đó không được sử dụng nữa. Kết luận Lý giải.
8. Nếu một biến được khai báo bên trong một vòng lặp for sử dụng cấu trúc phạm vi khối (ví dụ: `for (let i = 0; i < 10; i++)`), phạm vi của biến i là gì?
A. Toàn bộ chương trình. Kết luận Lý giải.
B. Chỉ trong vòng lặp for đó. Kết luận Lý giải.
C. Trong hàm chứa vòng lặp. Kết luận Lý giải.
D. Không có phạm vi xác định, chỉ tồn tại khi vòng lặp chạy. Kết luận Lý giải.
9. Tại sao việc hiểu rõ phạm vi của biến lại quan trọng đối với lập trình viên?
A. Để tránh sử dụng sai biến và gây ra lỗi logic hoặc xung đột tên biến. Kết luận Lý giải.
B. Để tối ưu hóa hiệu suất chương trình bằng cách sử dụng ít biến nhất có thể. Kết luận Lý giải.
C. Để đảm bảo chương trình luôn chạy nhanh hơn bằng cách giảm thiểu bộ nhớ sử dụng. Kết luận Lý giải.
D. Để có thể đặt tên biến một cách sáng tạo mà không bị giới hạn bởi quy tắc. Kết luận Lý giải.
10. Nếu bạn muốn một biến chỉ có thể được sử dụng bên trong một hàm và không thể truy cập từ bên ngoài hàm đó, bạn nên khai báo biến đó ở đâu?
A. Ngay sau khai báo lớp. Kết luận Lý giải.
B. Bên trong chính hàm đó. Kết luận Lý giải.
C. Ở cấp độ toàn cục của chương trình. Kết luận Lý giải.
D. Bên ngoài mọi hàm, nhưng bên trong một khối mã. Kết luận Lý giải.
11. Trong lập trình hướng đối tượng, phạm vi của một biến thành viên (member variable) của một lớp thường là gì?
A. Chỉ có thể truy cập bên trong phương thức khởi tạo. Kết luận Lý giải.
B. Có thể truy cập từ bất kỳ đâu trong chương trình. Kết luận Lý giải.
C. Có thể truy cập từ bên trong các phương thức của chính lớp đó và các lớp con (tùy thuộc vào mức độ truy cập như public, private, protected). Kết luận Lý giải.
D. Chỉ có thể truy cập từ bên ngoài lớp, thông qua các đối tượng được tạo ra. Kết luận Lý giải.
12. Biến block scope (phạm vi khối) là loại phạm vi nào, thường thấy trong các ngôn ngữ lập trình hiện đại như JavaScript hoặc C++?
A. Phạm vi chỉ giới hạn trong một câu lệnh duy nhất. Kết luận Lý giải.
B. Phạm vi giới hạn trong một khối mã được định nghĩa bởi dấu ngoặc nhọn {} hoặc cấu trúc tương tự. Kết luận Lý giải.
C. Phạm vi áp dụng cho toàn bộ tệp mã nguồn. Kết luận Lý giải.
D. Phạm vi chỉ tồn tại trong thời gian thực thi của một hàm. Kết luận Lý giải.
13. Nếu một hàm được lồng bên trong một hàm khác, biến được khai báo trong hàm bên ngoài có phạm vi như thế nào đối với hàm bên trong?
A. Hàm bên trong không thể truy cập biến của hàm bên ngoài. Kết luận Lý giải.
B. Biến của hàm bên ngoài có thể được truy cập bởi hàm bên trong, tuân theo nguyên tắc phạm vi lexical. Kết luận Lý giải.
C. Hàm bên trong sẽ tự động tạo ra một bản sao của biến. Kết luận Lý giải.
D. Biến của hàm bên ngoài sẽ bị che khuất bởi biến của hàm bên trong nếu có cùng tên. Kết luận Lý giải.
14. Khi nói về phạm vi thời gian sống (lifetime) của biến, nó đề cập đến điều gì?
A. Khoảng thời gian mà biến có thể được nhìn thấy trong mã nguồn. Kết luận Lý giải.
B. Khoảng thời gian mà biến tồn tại trong bộ nhớ và có thể được truy cập. Kết luận Lý giải.
C. Tốc độ thay đổi giá trị của biến. Kết luận Lý giải.
D. Độ phức tạp của thuật toán sử dụng biến. Kết luận Lý giải.
15. Phạm vi của biến tạm thời (temporary scope) thường gắn liền với vòng đời của cấu trúc dữ liệu hoặc đối tượng nào?
A. Biến toàn cục. Kết luận Lý giải.
B. Biến được khai báo trong một khối mã hoặc hàm, chỉ tồn tại khi khối/hàm đó đang thực thi. Kết luận Lý giải.
C. Biến được sử dụng cho mục đích tính toán tạm thời mà không cần lưu trữ lâu dài. Kết luận Lý giải.
D. Biến chỉ tồn tại trong một câu lệnh. Kết luận Lý giải.
16. Trong trường hợp một biến cục bộ có cùng tên với một biến toàn cục, điều gì sẽ xảy ra khi biến cục bộ đó được sử dụng trong phạm vi của nó?
A. Chương trình sẽ báo lỗi vì trùng tên biến. Kết luận Lý giải.
B. Biến toàn cục sẽ bị ghi đè và không thể sử dụng nữa. Kết luận Lý giải.
C. Biến cục bộ sẽ được ưu tiên sử dụng, che khuất biến toàn cục có cùng tên trong phạm vi đó. Kết luận Lý giải.
D. Hệ thống sẽ tự động đổi tên một trong hai biến để tránh xung đột. Kết luận Lý giải.
17. Trong các ngôn ngữ lập trình không hỗ trợ phạm vi khối (ví dụ: JavaScript với var thay vì let), biến được khai báo bên trong một vòng lặp for hoặc câu lệnh if sẽ có phạm vi nào?
A. Phạm vi khối. Kết luận Lý giải.
B. Phạm vi toàn cục. Kết luận Lý giải.
C. Phạm vi của hàm chứa vòng lặp/câu lệnh đó. Kết luận Lý giải.
D. Phạm vi chỉ tồn tại trong vòng lặp/câu lệnh đó. Kết luận Lý giải.
18. Phạm vi của biến có ảnh hưởng đến việc quản lý bộ nhớ như thế nào?
A. Phạm vi của biến không liên quan đến quản lý bộ nhớ. Kết luận Lý giải.
B. Biến có phạm vi cục bộ thường được giải phóng bộ nhớ ngay khi phạm vi đó kết thúc, giúp tiết kiệm bộ nhớ. Kết luận Lý giải.
C. Biến có phạm vi toàn cục luôn chiếm dụng bộ nhớ vĩnh viễn, ngay cả khi không sử dụng. Kết luận Lý giải.
D. Phạm vi của biến chỉ ảnh hưởng đến tốc độ truy cập, không ảnh hưởng đến bộ nhớ. Kết luận Lý giải.
19. Khái niệm phạm vi đóng (closure) trong lập trình liên quan mật thiết đến phạm vi của biến như thế nào?
A. Closure cho phép truy cập biến toàn cục từ bên trong hàm. Kết luận Lý giải.
B. Closure tạo ra một hàm có thể truy cập và nhớ các biến từ phạm vi mà nó được tạo ra, ngay cả sau khi phạm vi ban đầu đã kết thúc. Kết luận Lý giải.
C. Closure chỉ cho phép hàm truy cập các biến cục bộ của chính nó. Kết luận Lý giải.
D. Closure hoạt động bằng cách sao chép giá trị của biến vào hàm. Kết luận Lý giải.
20. Khái niệm phạm vi tĩnh (static scope) còn được gọi là gì và nó dựa trên nguyên tắc nào?
A. Còn gọi là phạm vi động (dynamic scope), dựa trên trình tự thực thi chương trình. Kết luận Lý giải.
B. Còn gọi là phạm vi lexical (lexical scope) hoặc phạm vi tĩnh (static scope), dựa trên cấu trúc mã nguồn mà biến được khai báo. Kết luận Lý giải.
C. Không có tên gọi khác, chỉ đơn giản là phạm vi của biến. Kết luận Lý giải.
D. Còn gọi là phạm vi của hàm (function scope), dựa trên việc gọi hàm. Kết luận Lý giải.
21. Tại sao việc sử dụng biến toàn cục một cách tràn lan có thể gây ra vấn đề trong các chương trình lớn?
A. Vì chúng làm chương trình chạy chậm hơn. Kết luận Lý giải.
B. Vì chúng làm tăng số lượng dòng mã cần viết. Kết luận Lý giải.
C. Vì chúng làm tăng khả năng xảy ra xung đột tên biến, khó khăn trong việc theo dõi thay đổi dữ liệu và bảo trì mã nguồn. Kết luận Lý giải.
D. Vì chúng yêu cầu nhiều bộ nhớ hơn so với biến cục bộ. Kết luận Lý giải.
22. Điều gì xảy ra với một biến có phạm vi cục bộ khi hàm mà nó được khai báo kết thúc thực thi?
A. Biến đó vẫn tồn tại và giữ nguyên giá trị. Kết luận Lý giải.
B. Biến đó sẽ bị hủy và giải phóng bộ nhớ. Kết luận Lý giải.
C. Biến đó trở thành biến toàn cục. Kết luận Lý giải.
D. Biến đó có thể được truy cập từ bất kỳ hàm nào khác. Kết luận Lý giải.
23. Nếu một biến được khai báo với từ khóa const (hằng số) trong JavaScript, điều này ảnh hưởng đến phạm vi của nó như thế nào?
A. Nó chỉ có thể được sử dụng một lần duy nhất. Kết luận Lý giải.
B. Phạm vi của nó bị giới hạn chặt chẽ hơn, thường là phạm vi khối, và giá trị của nó không thể thay đổi sau khi được gán. Kết luận Lý giải.
C. Nó tự động trở thành biến toàn cục. Kết luận Lý giải.
D. Phạm vi của nó không bị ảnh hưởng, chỉ là không thể gán lại giá trị. Kết luận Lý giải.
24. Trong ngữ cảnh của các ngôn ngữ lập trình, phạm vi của tên (name scope) có ý nghĩa gì?
A. Là tên gọi duy nhất của một biến trong toàn bộ chương trình. Kết luận Lý giải.
B. Là một vùng trong chương trình nơi một tên định danh (như tên biến, tên hàm) có thể được sử dụng một cách hợp lệ và được liên kết với một thực thể cụ thể. Kết luận Lý giải.
C. Là độ dài của tên biến. Kết luận Lý giải.
D. Là cách mà trình biên dịch phân tích tên biến. Kết luận Lý giải.
25. Trong ngôn ngữ lập trình, phạm vi của một biến (scope) xác định khu vực nào trong mã nguồn mà biến đó có thể được truy cập và sử dụng. Nếu một biến được khai báo bên trong một khối mã (ví dụ: bên trong một hàm hoặc một vòng lặp), phạm vi của nó thường bị giới hạn ở đâu?
A. Toàn bộ chương trình, bất kể nó được khai báo ở đâu. Kết luận Lý giải.
B. Chỉ bên trong khối mã mà nó được khai báo. Kết luận Lý giải.
C. Trong phạm vi toàn cục và cả các khối mã con. Kết luận Lý giải.
D. Trong phạm vi của tệp mã nguồn chứa nó. Kết luận Lý giải.