[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.76,0:00:03.07,Default,,0000,0000,0000,, Giờ ta đã nắm vững các kiến thức cơ bản về hàm, Dialogue: 0,0:00:03.07,0:00:07.40,Default,,0000,0000,0000,, Tôi muốn nói về một chủ đề có thể hơi rắc rối: Dialogue: 0,0:00:07.40,0:00:10.98,Default,,0000,0000,0000,, sự khác biệt giữa các biến cục bộ (local) và toàn cục (global). Dialogue: 0,0:00:11.37,0:00:14.18,Default,,0000,0000,0000,, Những điều này có thể vô nghĩa với bạn vào lúc này. Dialogue: 0,0:00:14.18,0:00:16.36,Default,,0000,0000,0000,, Như vậy, hãy bắt đầu với một ví dụ. Dialogue: 0,0:00:16.36,0:00:18.11,Default,,0000,0000,0000,, Tôi đã viết chương trình này ở đây để chỉ cho bạn Dialogue: 0,0:00:18.11,0:00:20.35,Default,,0000,0000,0000,, Tôi đã cao lên bao nhiêu inch khi còn nhỏ. Dialogue: 0,0:00:20.51,0:00:22.09,Default,,0000,0000,0000,, Vì mỗi người lớn lên với tốc độ phát triển khác nhau, Dialogue: 0,0:00:22.09,0:00:24.46,Default,,0000,0000,0000,, Tôi đã viết ra hàm này, calcInches, Dialogue: 0,0:00:24.46,0:00:27.26,Default,,0000,0000,0000,, trong đó ta có thể truyền vào startAge và endAge, Dialogue: 0,0:00:27.26,0:00:29.16,Default,,0000,0000,0000,, và inchPerYear, Dialogue: 0,0:00:29.70,0:00:32.41,Default,,0000,0000,0000,, và sau đó nó sẽ tính tổng cộng tôi đã cao lên Dialogue: 0,0:00:32.41,0:00:34.29,Default,,0000,0000,0000,, bao nhiêu inch trong thời gian đó. Dialogue: 0,0:00:34.87,0:00:36.93,Default,,0000,0000,0000,, . . . và trả về kết quả bất cứ khi nào được gọi. Dialogue: 0,0:00:37.36,0:00:40.09,Default,,0000,0000,0000,, Như vậy, bạn có thể thấy ở đây từ 0 đến 8 năm, Dialogue: 0,0:00:40.09,0:00:44.35,Default,,0000,0000,0000,, Tôi gọi calcInches và tôi truyền vào 0, 8 và 2.5, Dialogue: 0,0:00:44.35,0:00:47.72,Default,,0000,0000,0000,, bởi vì tôi đã cao lên khoảng 2,5 inch mỗi năm. Dialogue: 0,0:00:48.30,0:00:51.90,Default,,0000,0000,0000,, Và, nó tính toán, và bạn có thể thấy nó trả về 20. Dialogue: 0,0:00:52.17,0:00:57.94,Default,,0000,0000,0000,, 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 Dialogue: 0,0:00:57.94,0:01:01.13,Default,,0000,0000,0000,, 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. Dialogue: 0,0:01:01.91,0:01:05.31,Default,,0000,0000,0000,, Như vậy, trông gọn gàng đấy, nhưng giờ tôi muốn thực sự hiển thị Dialogue: 0,0:01:05.31,0:01:08.07,Default,,0000,0000,0000,, Tổng cộng tôi đã cao thêm bao nhiêu inch. Dialogue: 0,0:01:08.77,0:01:13.60,Default,,0000,0000,0000,, 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 Dialogue: 0,0:01:13.60,0:01:16.70,Default,,0000,0000,0000,, và suy nghĩ, "Hmm, ta có những giá trị nào ở đây?" Dialogue: 0,0:01:17.04,0:01:19.92,Default,,0000,0000,0000,, Tôi có thứ gì đó kiểu như biểu diễn tổng số inch? Dialogue: 0,0:01:20.58,0:01:26.04,Default,,0000,0000,0000,, Chà, tôi có biến totalInches này bên trong hàm calcInches, Dialogue: 0,0:01:26.04,0:01:30.56,Default,,0000,0000,0000,, vì vậy tôi chỉ có thể trả racái đó, xem nó nói gì; bắt đầu từ đó; Dialogue: 0,0:01:30.56,0:01:36.44,Default,,0000,0000,0000,, Như vậy, hãy gõ text(totalInches, 10, 200) và đặt nó xuống dưới. Dialogue: 0,0:01:36.44,0:01:38.46,Default,,0000,0000,0000,, Được rồi, hãy xem, ta có gì? Dialogue: 0,0:01:38.46,0:01:40.94,Default,,0000,0000,0000,, Oh, o-oh, ta đã có 'Oh không!' bạn thân mến. Dialogue: 0,0:01:40.94,0:01:42.94,Default,,0000,0000,0000,, Nó nói có một vấn đề. Dialogue: 0,0:01:42.94,0:01:45.56,Default,,0000,0000,0000,, totalInches không được định nghĩa (undefined). Dialogue: 0,0:01:45.56,0:01:47.62,Default,,0000,0000,0000,, Chà, thật lạ, vì ta Dialogue: 0,0:01:47.62,0:01:51.62,Default,,0000,0000,0000,, định nghĩa totalInches ngay tại đây, phải không? var totalInches =. Dialogue: 0,0:01:51.62,0:01:54.42,Default,,0000,0000,0000,, Vâng, vấn đề là ta đã định nghĩa Dialogue: 0,0:01:54.42,0:01:59.11,Default,,0000,0000,0000,, totalInches bên trong một hàm, trên dòng này ở đây. Dialogue: 0,0:01:59.11,0:02:01.85,Default,,0000,0000,0000,, Và khi ta khai báo một biến bên trong một hàm, Dialogue: 0,0:02:01.85,0:02:04.31,Default,,0000,0000,0000,, nó được coi là một biến cục bộ. Dialogue: 0,0:02:05.23,0:02:09.08,Default,,0000,0000,0000,, Nó chỉ tồn tại bên trong hàm này ở đây (calcInches). Dialogue: 0,0:02:09.08,0:02:12.94,Default,,0000,0000,0000,, Và code bên ngoài hàm, tất cả chỗ này, không thể thấy Dialogue: 0,0:02:12.94,0:02:15.79,Default,,0000,0000,0000,, biến cục bộ bên trong các hàm. Dialogue: 0,0:02:15.79,0:02:18.19,Default,,0000,0000,0000,, Nó chỉ thấy những gì được trả ra mà thôi. Dialogue: 0,0:02:18.19,0:02:21.22,Default,,0000,0000,0000,, Nó chỉ thấy giá trị chứ không phải là biến đó. Dialogue: 0,0:02:21.22,0:02:24.77,Default,,0000,0000,0000,, Như vậy, khi ta cố gắng sử dụng totalInches bên ngoài hàm, Dialogue: 0,0:02:24.77,0:02:26.25,Default,,0000,0000,0000,, máy tính không biết nó là gì, Dialogue: 0,0:02:26.25,0:02:28.60,Default,,0000,0000,0000,, và nói 'Này, tôi chưa bao giờ thấy biến này trước đây. Dialogue: 0,0:02:28.60,0:02:31.07,Default,,0000,0000,0000,, Nó không được định nghĩa. Tôi không thể hiển thị nó. ' Dialogue: 0,0:02:32.20,0:02:34.61,Default,,0000,0000,0000,, Như vậy, có một cách mà ta có thể làm Dialogue: 0,0:02:34.61,0:02:37.20,Default,,0000,0000,0000,, để code bên ngoài có thể thấy biến này. Dialogue: 0,0:02:37.40,0:02:42.49,Default,,0000,0000,0000,, Và đó là khi ta biến một biến cục bộ thành một biến toàn cục. Dialogue: 0,0:02:42.74,0:02:46.88,Default,,0000,0000,0000,, Ta có thể làm điều đó bằng cách đặt định nghĩa bên ngoài hàm, Dialogue: 0,0:02:47.54,0:02:50.04,Default,,0000,0000,0000,, vào cái gọi là phạm vi toàn cục. Dialogue: 0,0:02:51.25,0:02:54.32,Default,,0000,0000,0000,, Và giờ, bên trong hàm, tất cả ta đang làm Dialogue: 0,0:02:54.32,0:02:58.34,Default,,0000,0000,0000,, 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ó. Dialogue: 0,0:02:58.63,0:03:02.48,Default,,0000,0000,0000,, 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' Dialogue: 0,0:03:02.76,0:03:06.16,Default,,0000,0000,0000,, 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. Dialogue: 0,0:03:06.65,0:03:09.52,Default,,0000,0000,0000,, Nhưng nó không thực sự là giá trị mà ta đang tìm kiếm. Dialogue: 0,0:03:09.62,0:03:11.55,Default,,0000,0000,0000,, Đó chỉ là giá trị gần nhất. Dialogue: 0,0:03:11.55,0:03:13.94,Default,,0000,0000,0000,, Và đó là vì mỗi lần gọi hàm này, Dialogue: 0,0:03:13.94,0:03:17.79,Default,,0000,0000,0000,, 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? Dialogue: 0,0:03:18.71,0:03:21.93,Default,,0000,0000,0000,, Như vậy, những gì ta thực sự muốn làm là, ta muốn một biến mới Dialogue: 0,0:03:21.93,0:03:24.66,Default,,0000,0000,0000,, chỉ sử dụng để lưu trữ toàn cục Dialogue: 0,0:03:24.66,0:03:28.46,Default,,0000,0000,0000,, 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, Dialogue: 0,0:03:29.23,0:03:32.56,Default,,0000,0000,0000,, Như vậy, hãy biến cái này trở thành một biến cục bộ, Dialogue: 0,0:03:33.66,0:03:37.63,Default,,0000,0000,0000,, và hãy tạo một biến toàn cục mới gọi là lifeInches, Dialogue: 0,0:03:38.17,0:03:40.03,Default,,0000,0000,0000,, và ta sẽ bắt đầu nó ở giá trị 0 Dialogue: 0,0:03:40.63,0:03:45.38,Default,,0000,0000,0000,, Và sau đó bên trong hàm, ta sẽ thêm vào biến toàn cục này Dialogue: 0,0:03:45.38,0:03:49.48,Default,,0000,0000,0000,, bằng cách gõ lifeInches + = totalInches. Dialogue: 0,0:03:49.48,0:03:51.59,Default,,0000,0000,0000,, Như vậy, ta sẽ cộng vào, tuy nhiên phải tính toán nhiều Dialogue: 0,0:03:51.59,0:03:52.95,Default,,0000,0000,0000,, mỗi lần ta gọi hàm này, Dialogue: 0,0:03:52.95,0:03:56.40,Default,,0000,0000,0000,, ta sẽ cộng nó vào biến toàn cục lifeInches. Dialogue: 0,0:03:56.40,0:03:58.12,Default,,0000,0000,0000,, Và sau đó ở phía dưới, Dialogue: 0,0:03:58.12,0:04:00.46,Default,,0000,0000,0000,, ta sẽ hiển thị lifeInches: text(lifeInches, 10, 200). Dialogue: 0,0:04:00.46,0:04:02.100,Default,,0000,0000,0000,, Tada! tổng trưởng thành trong cuộc đời. Dialogue: 0,0:04:03.54,0:04:06.43,Default,,0000,0000,0000,, Giờ nó vẫn chưa thực là chiều cao của tôi. Tôi cao hơn thế. Dialogue: 0,0:04:06.43,0:04:07.60,Default,,0000,0000,0000,, Nhưng đó là bởi vì bạn biết, Dialogue: 0,0:04:07.60,0:04:10.84,Default,,0000,0000,0000,, ta bắt đầu sinh ra với chiều cao > 0. Dialogue: 0,0:04:10.84,0:04:13.98,Default,,0000,0000,0000,, Như vậy, nếu muốn tổng số, có lẽ tôi có thể bắt đầu từ giá trị 20. Dialogue: 0,0:04:14.28,0:04:17.26,Default,,0000,0000,0000,, Và đi thôi, đó là chiều cao của tôi. Dialogue: 0,0:04:17.26,0:04:20.04,Default,,0000,0000,0000,, Được rồi Như vậy, hãy cùng xem xét, totalInches Dialogue: 0,0:04:20.04,0:04:22.16,Default,,0000,0000,0000,, được gọi là một biến cục bộ. Dialogue: 0,0:04:22.16,0:04:24.45,Default,,0000,0000,0000,, Và ta biết vậy bởi ta thấy khai báo của nó Dialogue: 0,0:04:24.45,0:04:27.49,Default,,0000,0000,0000,, bên trong hàm này và không có bên ngoài hàm. Dialogue: 0,0:04:28.52,0:04:30.82,Default,,0000,0000,0000,, Và điều đó có nghĩa là code bên ngoài này ở đây Dialogue: 0,0:04:30.82,0:04:34.37,Default,,0000,0000,0000,, không biết về biến có tên totalInches. Dialogue: 0,0:04:34.81,0:04:37.66,Default,,0000,0000,0000,, Giờ lifeInches là thứ mà ta gọi là biến toàn cục. Dialogue: 0,0:04:37.66,0:04:39.50,Default,,0000,0000,0000,, Và ta biết rằng bởi ta thấy khai báo của nó Dialogue: 0,0:04:39.50,0:04:42.73,Default,,0000,0000,0000,, bên ngoài của bất kỳ hàm trong phạm vi toàn chương trình. Dialogue: 0,0:04:43.59,0:04:45.07,Default,,0000,0000,0000,, Như vậy, hãy cố gắng ghi nhớ điều này khi Dialogue: 0,0:04:45.07,0:04:47.16,Default,,0000,0000,0000,, bạn đang viết các hàm và các biến. Dialogue: 0,0:04:47.16,0:04:48.83,Default,,0000,0000,0000,, Và tự suy nghĩ xem bạn có muốn Dialogue: 0,0:04:48.83,0:04:51.31,Default,,0000,0000,0000,, nó là biến cục bộ cho riêng 1 hàm sử dụng, Dialogue: 0,0:04:51.31,0:04:54.65,Default,,0000,0000,0000,, hoặc một biến toàn cục cho toàn bộ chương trình sử dụng. Dialogue: 0,0:04:54.65,0:04:57.35,Default,,0000,0000,0000,, Và đừng lo lắng nếu điều này khó khăn xoắn não bạn. Dialogue: 0,0:04:57.35,0:04:59.93,Default,,0000,0000,0000,, Đây là một trong những khái niệm khó nhất trong lập trình nói chung, Dialogue: 0,0:04:59.93,0:05:01.73,Default,,0000,0000,0000,, và trong JavaScript nói riêng. Dialogue: 0,0:05:01.73,0:00:00.00,Default,,0000,0000,0000,, Và đó là kỹ năng bạn cải thiện dần khi tiếp tục luyện tập.