-
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.