Giờ ta đã nắm vững các kiến thức cơ bản về hàm,
Tôi muốn nói về một chủ đề có thể hơi rắc rối:
sự khác biệt giữa các biến cục bộ (local) và toàn cục (global).
Những điều này có thể vô nghĩa với bạn vào lúc này.
Như vậy, hãy bắt đầu với một ví dụ.
Tôi đã viết chương trình này ở đây để chỉ cho bạn
Tôi đã cao lên bao nhiêu inch khi còn nhỏ.
Vì mỗi người lớn lên với tốc độ phát triển khác nhau,
Tôi đã viết ra hàm này, calcInches,
trong đó ta có thể truyền vào startAge và endAge,
và inchPerYear,
và sau đó nó sẽ tính tổng cộng tôi đã cao lên
bao nhiêu inch trong thời gian đó.
. . . và trả về kết quả bất cứ khi nào được gọi.
Như vậy, bạn có thể thấy ở đây từ 0 đến 8 năm,
Tôi gọi calcInches và tôi truyền vào 0, 8 và 2.5,
bởi vì tôi đã cao lên khoảng 2,5 inch mỗi năm.
Và, nó tính toán, và bạn có thể thấy nó trả về 20.
Sau đó, từ 8 đến 16, tôi gọi nó 'từ', và tôi truyền vào nó 8 và 16 và sau đó 2
bởi vì tôi đã không lớn lên quá nhiều và bạn có thể thấy nó trả ra 16.
Như vậy, trông gọn gàng đấy, nhưng giờ tôi muốn thực sự hiển thị
Tổng cộng tôi đã cao thêm bao nhiêu inch.
Vậy làm thế nào để tôi làm điều đó? Vâng, tôi có thể bắt đầu bằng cách đọc code
và suy nghĩ, "Hmm, ta có những giá trị nào ở đây?"
Tôi có thứ gì đó kiểu như biểu diễn tổng số inch?
Chà, tôi có biến totalInches này bên trong hàm calcInches,
vì vậy tôi chỉ có thể trả racái đó, xem nó nói gì; bắt đầu từ đó;
Như vậy, hãy gõ text(totalInches, 10, 200) và đặt nó xuống dưới.
Được rồi, hãy xem, ta có gì?
Oh, o-oh, ta đã có 'Oh không!' bạn thân mến.
Nó nói có một vấn đề.
totalInches không được định nghĩa (undefined).
Chà, thật lạ, vì ta
định nghĩa totalInches ngay tại đây, phải không? var totalInches =.
Vâng, vấn đề là ta đã định nghĩa
totalInches bên trong một hàm, trên dòng này ở đây.
Và khi ta khai báo một biến bên trong một hàm,
nó được coi là một biến cục bộ.
Nó chỉ tồn tại bên trong hàm này ở đây (calcInches).
Và code bên ngoài hàm, tất cả chỗ này, không thể thấy
biến cục bộ bên trong các hàm.
Nó chỉ thấy những gì được trả ra mà thôi.
Nó chỉ thấy giá trị chứ không phải là biến đó.
Như vậy, khi ta cố gắng sử dụng totalInches bên ngoài hàm,
máy tính không biết nó là gì,
và nói 'Này, tôi chưa bao giờ thấy biến này trước đây.
Nó không được định nghĩa. Tôi không thể hiển thị nó. '
Như vậy, có một cách mà ta có thể làm
để code bên ngoài có thể thấy biến này.
Và đó là khi ta biến một biến cục bộ thành một biến toàn cục.
Ta có thể làm điều đó bằng cách đặt định nghĩa bên ngoài hàm,
vào cái gọi là phạm vi toàn cục.
Và giờ, bên trong hàm, tất cả ta đang làm
là thay đổi giá trị của nó trong mỗi lần gọi, mà không định nghĩa và khai báo nó.
Như vậy, bạn có thể thấy rằng nó ghi 'Tổng số chiều cao trong suốt cuộc đời: 16'
Như vậy, nó tìm thấy biến vì ta đã biến nó thành một biến toàn cục.
Nhưng nó không thực sự là giá trị mà ta đang tìm kiếm.
Đó chỉ là giá trị gần nhất.
Và đó là vì mỗi lần gọi hàm này,
nó gán totalInches cho bất cứ giá trị nào tính toán tại thời điểm đó. Đúng không?
Như vậy, những gì ta thực sự muốn làm là, ta muốn một biến mới
chỉ sử dụng để lưu trữ toàn cục
những gì ta thêm vào sau mỗi lần tính toán, bạn biết đấy, tổng số cho một vùng,
Như vậy, hãy biến cái này trở thành một biến cục bộ,
và hãy tạo một biến toàn cục mới gọi là lifeInches,
và ta sẽ bắt đầu nó ở giá trị 0
Và sau đó bên trong hàm, ta sẽ thêm vào biến toàn cục này
bằng cách gõ lifeInches + = totalInches.
Như vậy, ta sẽ cộng vào, tuy nhiên phải tính toán nhiều
mỗi lần ta gọi hàm này,
ta sẽ cộng nó vào biến toàn cục lifeInches.
Và sau đó ở phía dưới,
ta sẽ hiển thị lifeInches: text(lifeInches, 10, 200).
Tada! tổng trưởng thành trong cuộc đời.
Giờ nó vẫn chưa thực là chiều cao của tôi. Tôi cao hơn thế.
Nhưng đó là bởi vì bạn biết,
ta bắt đầu sinh ra với chiều cao > 0.
Như vậy, nếu muốn tổng số, có lẽ tôi có thể bắt đầu từ giá trị 20.
Và đi thôi, đó là chiều cao của tôi.
Được rồi Như vậy, hãy cùng xem xét, totalInches
được gọi là một biến cục bộ.
Và ta biết vậy bởi ta thấy khai báo của nó
bên trong hàm này và không có bên ngoài hàm.
Và điều đó có nghĩa là code bên ngoài này ở đây
không biết về biến có tên totalInches.
Giờ lifeInches là thứ mà ta gọi là biến toàn cục.
Và ta biết rằng bởi ta thấy khai báo của nó
bên ngoài của bất kỳ hàm trong phạm vi toàn chương trình.
Như vậy, hãy cố gắng ghi nhớ điều này khi
bạn đang viết các hàm và các biến.
Và tự suy nghĩ xem bạn có muốn
nó là biến cục bộ cho riêng 1 hàm sử dụng,
hoặc một biến toàn cục cho toàn bộ chương trình sử dụng.
Và đừng lo lắng nếu điều này khó khăn xoắn não bạn.
Đây là một trong những khái niệm khó nhất trong lập trình nói chung,
và trong JavaScript nói riêng.
Và đó là kỹ năng bạn cải thiện dần khi tiếp tục luyện tập.