WEBVTT 00:00:00.764 --> 00:00:03.070 Giờ ta đã nắm vững các kiến thức cơ bản về hàm, 00:00:03.070 --> 00:00:07.396 Tôi muốn nói về một chủ đề có thể hơi rắc rối: 00:00:07.396 --> 00:00:10.984 sự khác biệt giữa các biến cục bộ (local) và toàn cục (global). 00:00:11.374 --> 00:00:14.179 Những điều này có thể vô nghĩa với bạn vào lúc này. 00:00:14.179 --> 00:00:16.364 Như vậy, hãy bắt đầu với một ví dụ. 00:00:16.364 --> 00:00:18.110 Tôi đã viết chương trình này ở đây để chỉ cho bạn 00:00:18.110 --> 00:00:20.346 Tôi đã cao lên bao nhiêu inch khi còn nhỏ. 00:00:20.506 --> 00:00:22.087 Vì mỗi người lớn lên với tốc độ phát triển khác nhau, 00:00:22.087 --> 00:00:24.458 Tôi đã viết ra hàm này, calcInches, 00:00:24.458 --> 00:00:27.264 trong đó ta có thể truyền vào startAge và endAge, 00:00:27.264 --> 00:00:29.160 và inchPerYear, 00:00:29.700 --> 00:00:32.406 và sau đó nó sẽ tính tổng cộng tôi đã cao lên 00:00:32.406 --> 00:00:34.294 bao nhiêu inch trong thời gian đó. 00:00:34.874 --> 00:00:36.932 . . . và trả về kết quả bất cứ khi nào được gọi. 00:00:37.362 --> 00:00:40.093 Như vậy, bạn có thể thấy ở đây từ 0 đến 8 năm, 00:00:40.093 --> 00:00:44.354 Tôi gọi calcInches và tôi truyền vào 0, 8 và 2.5, 00:00:44.354 --> 00:00:47.717 bởi vì tôi đã cao lên khoảng 2,5 inch mỗi năm. 00:00:48.297 --> 00:00:51.904 Và, nó tính toán, và bạn có thể thấy nó trả về 20. 00:00:52.171 --> 00:00:57.939 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 00:00:57.939 --> 00:01:01.133 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. 00:01:01.913 --> 00:01:05.312 Như vậy, trông gọn gàng đấy, nhưng giờ tôi muốn thực sự hiển thị 00:01:05.312 --> 00:01:08.071 Tổng cộng tôi đã cao thêm bao nhiêu inch. 00:01:08.771 --> 00:01:13.599 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 00:01:13.599 --> 00:01:16.697 và suy nghĩ, "Hmm, ta có những giá trị nào ở đây?" 00:01:17.045 --> 00:01:19.922 Tôi có thứ gì đó kiểu như biểu diễn tổng số inch? 00:01:20.582 --> 00:01:26.038 Chà, tôi có biến totalInches này bên trong hàm calcInches, 00:01:26.038 --> 00:01:30.560 vì vậy tôi chỉ có thể trả racái đó, xem nó nói gì; bắt đầu từ đó; 00:01:30.560 --> 00:01:36.440 Như vậy, hãy gõ text(totalInches, 10, 200) và đặt nó xuống dưới. 00:01:36.440 --> 00:01:38.455 Được rồi, hãy xem, ta có gì? 00:01:38.455 --> 00:01:40.942 Oh, o-oh, ta đã có 'Oh không!' bạn thân mến. 00:01:40.942 --> 00:01:42.939 Nó nói có một vấn đề. 00:01:42.939 --> 00:01:45.556 totalInches không được định nghĩa (undefined). 00:01:45.556 --> 00:01:47.624 Chà, thật lạ, vì ta 00:01:47.624 --> 00:01:51.622 định nghĩa totalInches ngay tại đây, phải không? var totalInches =. 00:01:51.622 --> 00:01:54.423 Vâng, vấn đề là ta đã định nghĩa 00:01:54.423 --> 00:01:59.114 totalInches bên trong một hàm, trên dòng này ở đây. 00:01:59.114 --> 00:02:01.854 Và khi ta khai báo một biến bên trong một hàm, 00:02:01.854 --> 00:02:04.314 nó được coi là một biến cục bộ. 00:02:05.234 --> 00:02:09.076 Nó chỉ tồn tại bên trong hàm này ở đây (calcInches). 00:02:09.076 --> 00:02:12.945 Và code bên ngoài hàm, tất cả chỗ này, không thể thấy 00:02:12.945 --> 00:02:15.794 biến cục bộ bên trong các hàm. 00:02:15.794 --> 00:02:18.194 Nó chỉ thấy những gì được trả ra mà thôi. 00:02:18.194 --> 00:02:21.224 Nó chỉ thấy giá trị chứ không phải là biến đó. 00:02:21.224 --> 00:02:24.767 Như vậy, khi ta cố gắng sử dụng totalInches bên ngoài hàm, 00:02:24.767 --> 00:02:26.250 máy tính không biết nó là gì, 00:02:26.250 --> 00:02:28.596 và nói 'Này, tôi chưa bao giờ thấy biến này trước đây. 00:02:28.596 --> 00:02:31.072 Nó không được định nghĩa. Tôi không thể hiển thị nó. ' 00:02:32.202 --> 00:02:34.610 Như vậy, có một cách mà ta có thể làm 00:02:34.610 --> 00:02:37.198 để code bên ngoài có thể thấy biến này. 00:02:37.398 --> 00:02:42.487 Và đó là khi ta biến một biến cục bộ thành một biến toàn cục. 00:02:42.736 --> 00:02:46.879 Ta có thể làm điều đó bằng cách đặt định nghĩa bên ngoài hàm, 00:02:47.539 --> 00:02:50.042 vào cái gọi là phạm vi toàn cục. 00:02:51.252 --> 00:02:54.322 Và giờ, bên trong hàm, tất cả ta đang làm 00:02:54.322 --> 00:02:58.342 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ó. 00:02:58.632 --> 00:03:02.484 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' 00:03:02.756 --> 00:03:06.158 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. 00:03:06.648 --> 00:03:09.515 Nhưng nó không thực sự là giá trị mà ta đang tìm kiếm. 00:03:09.625 --> 00:03:11.552 Đó chỉ là giá trị gần nhất. 00:03:11.552 --> 00:03:13.938 Và đó là vì mỗi lần gọi hàm này, 00:03:13.938 --> 00:03:17.794 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? 00:03:18.714 --> 00:03:21.930 Như vậy, những gì ta thực sự muốn làm là, ta muốn một biến mới 00:03:21.930 --> 00:03:24.662 chỉ sử dụng để lưu trữ toàn cục 00:03:24.662 --> 00:03:28.464 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, 00:03:29.228 --> 00:03:32.563 Như vậy, hãy biến cái này trở thành một biến cục bộ, 00:03:33.663 --> 00:03:37.628 và hãy tạo một biến toàn cục mới gọi là lifeInches, 00:03:38.168 --> 00:03:40.034 và ta sẽ bắt đầu nó ở giá trị 0 00:03:40.634 --> 00:03:45.381 Và sau đó bên trong hàm, ta sẽ thêm vào biến toàn cục này 00:03:45.381 --> 00:03:49.478 bằng cách gõ lifeInches + = totalInches. 00:03:49.478 --> 00:03:51.586 Như vậy, ta sẽ cộng vào, tuy nhiên phải tính toán nhiều 00:03:51.586 --> 00:03:52.954 mỗi lần ta gọi hàm này, 00:03:52.954 --> 00:03:56.403 ta sẽ cộng nó vào biến toàn cục lifeInches. 00:03:56.403 --> 00:03:58.121 Và sau đó ở phía dưới, 00:03:58.121 --> 00:04:00.459 ta sẽ hiển thị lifeInches: text(lifeInches, 10, 200). 00:04:00.459 --> 00:04:02.998 Tada! tổng trưởng thành trong cuộc đời. 00:04:03.538 --> 00:04:06.431 Giờ nó vẫn chưa thực là chiều cao của tôi. Tôi cao hơn thế. 00:04:06.431 --> 00:04:07.595 Nhưng đó là bởi vì bạn biết, 00:04:07.595 --> 00:04:10.839 ta bắt đầu sinh ra với chiều cao > 0. 00:04:10.839 --> 00:04:13.984 Như vậy, nếu muốn tổng số, có lẽ tôi có thể bắt đầu từ giá trị 20. 00:04:14.284 --> 00:04:17.265 Và đi thôi, đó là chiều cao của tôi. 00:04:17.265 --> 00:04:20.036 Được rồi Như vậy, hãy cùng xem xét, totalInches 00:04:20.036 --> 00:04:22.157 được gọi là một biến cục bộ. 00:04:22.157 --> 00:04:24.454 Và ta biết vậy bởi ta thấy khai báo của nó 00:04:24.454 --> 00:04:27.491 bên trong hàm này và không có bên ngoài hàm. 00:04:28.521 --> 00:04:30.822 Và điều đó có nghĩa là code bên ngoài này ở đây 00:04:30.822 --> 00:04:34.373 không biết về biến có tên totalInches. 00:04:34.813 --> 00:04:37.656 Giờ lifeInches là thứ mà ta gọi là biến toàn cục. 00:04:37.656 --> 00:04:39.501 Và ta biết rằng bởi ta thấy khai báo của nó 00:04:39.501 --> 00:04:42.726 bên ngoài của bất kỳ hàm trong phạm vi toàn chương trình. 00:04:43.586 --> 00:04:45.070 Như vậy, hãy cố gắng ghi nhớ điều này khi 00:04:45.070 --> 00:04:47.158 bạn đang viết các hàm và các biến. 00:04:47.158 --> 00:04:48.834 Và tự suy nghĩ xem bạn có muốn 00:04:48.834 --> 00:04:51.310 nó là biến cục bộ cho riêng 1 hàm sử dụng, 00:04:51.310 --> 00:04:54.646 hoặc một biến toàn cục cho toàn bộ chương trình sử dụng. 00:04:54.646 --> 00:04:57.354 Và đừng lo lắng nếu điều này khó khăn xoắn não bạn. 00:04:57.354 --> 00:04:59.927 Đây là một trong những khái niệm khó nhất trong lập trình nói chung, 00:04:59.927 --> 00:05:01.730 và trong JavaScript nói riêng. 00:05:01.730 --> 00:00:00.000 Và đó là kỹ năng bạn cải thiện dần khi tiếp tục luyện tập.