Javascript Codecademy Beginner Course #3 (Scope)
Global Scope
Ta có thể đặt một variable ở ngoài hàm function nhưng vẫn có thể sử dụng nó bên trong hàm
function với một phạm vi toàn cục ở đâu cũng được
Bài tập:
Nhập 3 biến lần lượt như sau:
const satellite ='The Moon';
const galaxy = 'The Milky Way';
const stars = 'North Star';
Ở dưới tạo 1 hàm tên
function callMyNightSky(){
}
Ghi vào bên trong hàm:
return 'Night Sky: ' + satellite + ', ' + stars + ', and ' + galaxy;
Sau đó đóng khối lệnh lại bằng dấu } rồi:
console.log(callMyNightSky());
Output sẽ là:
Block Scope
Ở trên ta đã tìm hiểu được rằng nếu ta tạo ra một biến Global Scope ( một biến có phạm vi toàn cục ) thì ta sẽ sử dụng được biến đó ở trong bất kì hàm function nào.
Vậy bây giờ hãy thử ngược lại, ta sẽ gọi tên biến ở khối lệnh bên trong hàm function, và thử console.log giá trị nằm trong hàm đó ra ngoài mà không return, xem chương trình sẽ xảy ra hiện tượng gì ?
const logSkyColor = () => {
let color = 'blue';
console.log(color); // blue // 1.Đây là giá trị của biến color bên trong hàm function logSkyColor
}
logSkyColor();
console.log(color); // 2. Đây cũng vậy nhưng mà nằm ngoài hàm
Vậy output sẽ là gì ??
Output sẽ là:
Như các bạn thấy nó chỉ in ra một lần giá trị 'blue' của biến color vì biến color chỉ có tác dụng bên trong hàm logSkyColor, còn nếu ta muốn log ra ở bên ngoài {}, thì không thể được
Vì phần này khá dễ nên sẽ bỏ qua bài tập!
Scope Pollution
Như các bạn thấy, đó là một ý tưởng khá hay để khiến cho việc truy cập tới các biến dễ dàng hơn, nhưng việc có quá nhiều biến toàn cục cũng khiến cho chương trình của bạn rất dễ hỏng, điển hình là ví dụ sau đây:
let num = 50; // Hiện tại thì giá trị của biến num vẫn là 50
const logNum = () => {
num = 100; // Thay đổi giá trị num thành 100. Hãy ghi nhớ dòng code này
console.log(num);
};
logNum(); // In ra màn hình số 100
console.log(num); // In ra màn hình số 100
Output sẽ là:
Đó như các bạn có thể thấy, việc biết về biến toàn cục là rất quan trọng, nhưng chúng ta nên hạn chế việc đó khi có thể.




Comments
Post a Comment