1 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, 2 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: 3 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). 4 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. 5 00:00:14,179 --> 00:00:16,364 Như vậy, hãy bắt đầu với một ví dụ. 6 00:00:16,364 --> 00:00:18,110 Tôi đã viết chương trình này ở đây để chỉ cho bạn 7 00:00:18,110 --> 00:00:20,346 Tôi đã cao lên bao nhiêu inch khi còn nhỏ. 8 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, 9 00:00:22,087 --> 00:00:24,458 Tôi đã viết ra hàm này, calcInches, 10 00:00:24,458 --> 00:00:27,264 trong đó ta có thể truyền vào startAge và endAge, 11 00:00:27,264 --> 00:00:29,160 và inchPerYear, 12 00:00:29,700 --> 00:00:32,406 và sau đó nó sẽ tính tổng cộng tôi đã cao lên 13 00:00:32,406 --> 00:00:34,294 bao nhiêu inch trong thời gian đó. 14 00:00:34,874 --> 00:00:36,932 . . . và trả về kết quả bất cứ khi nào được gọi. 15 00:00:37,362 --> 00:00:40,093 Như vậy, bạn có thể thấy ở đây từ 0 đến 8 năm, 16 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, 17 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. 18 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. 19 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 20 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. 21 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ị 22 00:01:05,312 --> 00:01:08,071 Tổng cộng tôi đã cao thêm bao nhiêu inch. 23 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 24 00:01:13,599 --> 00:01:16,697 và suy nghĩ, "Hmm, ta có những giá trị nào ở đây?" 25 00:01:17,045 --> 00:01:19,922 Tôi có thứ gì đó kiểu như biểu diễn tổng số inch? 26 00:01:20,582 --> 00:01:26,038 Chà, tôi có biến totalInches này bên trong hàm calcInches, 27 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ừ đó; 28 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. 29 00:01:36,440 --> 00:01:38,455 Được rồi, hãy xem, ta có gì? 30 00:01:38,455 --> 00:01:40,942 Oh, o-oh, ta đã có 'Oh không!' bạn thân mến. 31 00:01:40,942 --> 00:01:42,939 Nó nói có một vấn đề. 32 00:01:42,939 --> 00:01:45,556 totalInches không được định nghĩa (undefined). 33 00:01:45,556 --> 00:01:47,624 Chà, thật lạ, vì ta 34 00:01:47,624 --> 00:01:51,622 định nghĩa totalInches ngay tại đây, phải không? var totalInches =. 35 00:01:51,622 --> 00:01:54,423 Vâng, vấn đề là ta đã định nghĩa 36 00:01:54,423 --> 00:01:59,114 totalInches bên trong một hàm, trên dòng này ở đây. 37 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, 38 00:02:01,854 --> 00:02:04,314 nó được coi là một biến cục bộ. 39 00:02:05,234 --> 00:02:09,076 Nó chỉ tồn tại bên trong hàm này ở đây (calcInches). 40 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 41 00:02:12,945 --> 00:02:15,794 biến cục bộ bên trong các hàm. 42 00:02:15,794 --> 00:02:18,194 Nó chỉ thấy những gì được trả ra mà thôi. 43 00:02:18,194 --> 00:02:21,224 Nó chỉ thấy giá trị chứ không phải là biến đó. 44 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, 45 00:02:24,767 --> 00:02:26,250 máy tính không biết nó là gì, 46 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. 47 00:02:28,596 --> 00:02:31,072 Nó không được định nghĩa. Tôi không thể hiển thị nó. ' 48 00:02:32,202 --> 00:02:34,610 Như vậy, có một cách mà ta có thể làm 49 00:02:34,610 --> 00:02:37,198 để code bên ngoài có thể thấy biến này. 50 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. 51 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, 52 00:02:47,539 --> 00:02:50,042 vào cái gọi là phạm vi toàn cục. 53 00:02:51,252 --> 00:02:54,322 Và giờ, bên trong hàm, tất cả ta đang làm 54 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ó. 55 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' 56 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. 57 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. 58 00:03:09,625 --> 00:03:11,552 Đó chỉ là giá trị gần nhất. 59 00:03:11,552 --> 00:03:13,938 Và đó là vì mỗi lần gọi hàm này, 60 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? 61 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 62 00:03:21,930 --> 00:03:24,662 chỉ sử dụng để lưu trữ toàn cục 63 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, 64 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ộ, 65 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, 66 00:03:38,168 --> 00:03:40,034 và ta sẽ bắt đầu nó ở giá trị 0 67 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 68 00:03:45,381 --> 00:03:49,478 bằng cách gõ lifeInches + = totalInches. 69 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 70 00:03:51,586 --> 00:03:52,954 mỗi lần ta gọi hàm này, 71 00:03:52,954 --> 00:03:56,403 ta sẽ cộng nó vào biến toàn cục lifeInches. 72 00:03:56,403 --> 00:03:58,121 Và sau đó ở phía dưới, 73 00:03:58,121 --> 00:04:00,459 ta sẽ hiển thị lifeInches: text(lifeInches, 10, 200). 74 00:04:00,459 --> 00:04:02,998 Tada! tổng trưởng thành trong cuộc đời. 75 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ế. 76 00:04:06,431 --> 00:04:07,595 Nhưng đó là bởi vì bạn biết, 77 00:04:07,595 --> 00:04:10,839 ta bắt đầu sinh ra với chiều cao > 0. 78 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. 79 00:04:14,284 --> 00:04:17,265 Và đi thôi, đó là chiều cao của tôi. 80 00:04:17,265 --> 00:04:20,036 Được rồi Như vậy, hãy cùng xem xét, totalInches 81 00:04:20,036 --> 00:04:22,157 được gọi là một biến cục bộ. 82 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ó 83 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. 84 00:04:28,521 --> 00:04:30,822 Và điều đó có nghĩa là code bên ngoài này ở đây 85 00:04:30,822 --> 00:04:34,373 không biết về biến có tên totalInches. 86 00:04:34,813 --> 00:04:37,656 Giờ lifeInches là thứ mà ta gọi là biến toàn cục. 87 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ó 88 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. 89 00:04:43,586 --> 00:04:45,070 Như vậy, hãy cố gắng ghi nhớ điều này khi 90 00:04:45,070 --> 00:04:47,158 bạn đang viết các hàm và các biến. 91 00:04:47,158 --> 00:04:48,834 Và tự suy nghĩ xem bạn có muốn 92 00:04:48,834 --> 00:04:51,310 nó là biến cục bộ cho riêng 1 hàm sử dụng, 93 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. 94 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. 95 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, 96 00:04:59,927 --> 00:05:01,730 và trong JavaScript nói riêng. 97 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.