Tại sao chúng ta không nên sử dụng VAR trong JavaScript?
Khai báo 8 tương tự như 6. Hầu hết thời gian chúng ta có thể thay thế 6 bằng 8 hoặc ngược lại và mong mọi thứ hoạt động Show
Nhưng bên trong 8 là một con quái vật rất khác, có nguồn gốc từ rất xa xưa. Nó thường không được sử dụng trong các kịch bản hiện đại, nhưng vẫn ẩn nấp trong các kịch bản cũNếu bạn không có kế hoạch gặp những kịch bản như vậy, bạn thậm chí có thể bỏ qua chương này hoặc hoãn lại Mặt khác, điều quan trọng là phải hiểu sự khác biệt khi di chuyển các tập lệnh cũ từ 8 sang 6, để tránh các lỗi lạ“var” không có phạm vi khốiCác biến, được khai báo bằng 8, thuộc phạm vi chức năng hoặc phạm vi toàn cầu. Chúng có thể nhìn thấy thông qua các khốiVí dụ
Khi 8 bỏ qua các khối mã, chúng ta có một biến toàn cục 18Nếu chúng ta sử dụng 19 thay vì 30, thì biến sẽ chỉ hiển thị bên trong 31 1Điều tương tự cho các vòng lặp. 8 không thể là khối hoặc vòng lặp cục bộ 3Nếu một khối mã nằm trong một hàm, thì 8 sẽ trở thành một biến cấp hàm 9Như chúng ta có thể thấy, 8 xuyên qua 31, 36 hoặc các khối mã khác. Đó là bởi vì cách đây rất lâu trong JavaScript, các khối không có Môi trường từ vựng và 8 là phần còn lại của điều đó“var” cho phép khai báo lạiNếu chúng ta khai báo cùng một biến với 6 hai lần trong cùng một phạm vi, thì đó là một lỗi 5Với 8, chúng ta có thể khai báo lại một biến nhiều lần. Nếu chúng ta sử dụng 8 với một biến đã được khai báo, nó sẽ bị bỏ qua 8Các biến “var” có thể được khai báo bên dưới mục đích sử dụng của chúngKhai báo 8 được xử lý khi chức năng bắt đầu (hoặc tập lệnh bắt đầu cho toàn cầu)Nói cách khác, các biến 8 được định nghĩa ngay từ đầu hàm, bất kể định nghĩa ở đâu (giả sử rằng định nghĩa không có trong hàm lồng nhau)Vì vậy, mã này 1…Về mặt kỹ thuật giống như thế này (đã di chuyển 93 ở trên) 3…Hoặc thậm chí như thế này (hãy nhớ rằng, các khối mã bị bỏ qua) 4Người ta còn gọi hành vi đó là “hoisting” (nâng cao), bởi vì tất cả 8 đều được “hoisted” (nâng) lên trên cùng của hàmVì vậy, trong ví dụ trên, nhánh 95 không bao giờ thực thi, nhưng điều đó không thành vấn đề. 8 bên trong nó được xử lý khi bắt đầu hàm, vì vậy tại thời điểm 97 biến tồn tạiCác tuyên bố được nâng lên, nhưng các bài tập thì không Điều đó được thể hiện rõ nhất bằng một ví dụ 0Dòng 98 có hai hành động trong đó
Khai báo được xử lý khi bắt đầu thực thi hàm (“hoisted”), nhưng phép gán luôn hoạt động tại nơi nó xuất hiện. Vì vậy, mã hoạt động cơ bản như thế này 1Bởi vì tất cả các khai báo của 8 đều được xử lý khi bắt đầu hàm, nên chúng ta có thể tham chiếu chúng ở bất kỳ đâu. Nhưng các biến không được xác định cho đến khi các bài tậpTrong cả hai ví dụ trên, 52 chạy không có lỗi, vì biến 53 tồn tại. Nhưng giá trị của nó chưa được gán, vì vậy nó hiển thị 54IIFETrước đây, vì chỉ có 8 và nó không có khả năng hiển thị ở cấp độ khối nên các lập trình viên đã phát minh ra một cách để mô phỏng nó. Những gì họ đã làm được gọi là "biểu thức hàm được gọi ngay lập tức" (viết tắt là IIFE)Đó không phải là thứ chúng ta nên sử dụng ngày nay, nhưng bạn có thể tìm thấy chúng trong các tập lệnh cũ Một IIFE trông như thế này 2Tại đây, một Biểu thức hàm được tạo và được gọi ngay lập tức. Vì vậy, mã thực thi ngay lập tức và có các biến riêng của nó Biểu thức hàm được bao bọc bởi dấu ngoặc đơn 56, bởi vì khi công cụ JavaScript gặp 57 trong mã chính, nó sẽ hiểu đó là phần đầu của Tuyên bố hàm. Nhưng một Khai báo hàm phải có tên, vì vậy loại mã này sẽ báo lỗi 3Ngay cả khi chúng ta nói. "Được rồi, hãy thêm một cái tên", điều đó sẽ không hoạt động, vì JavaScript không cho phép gọi Khai báo hàm ngay lập tức 4Vì vậy, dấu ngoặc đơn xung quanh hàm là một thủ thuật để cho JavaScript thấy rằng hàm được tạo trong ngữ cảnh của một biểu thức khác và do đó, nó là Biểu thức hàm. nó không cần tên và có thể được gọi ngay lập tức Có tồn tại những cách khác ngoài dấu ngoặc đơn để nói với JavaScript rằng chúng tôi muốn nói đến Biểu thức hàm 5Trong tất cả các trường hợp trên chúng ta khai báo một Biểu thức hàm và chạy nó ngay lập tức. Hãy lưu ý lại. ngày nay không có lý do gì để viết mã như vậy Bản tóm tắtCó hai điểm khác biệt chính của 8 so với 59
Có một sự khác biệt rất nhỏ nữa liên quan đến đối tượng toàn cục mà chúng ta sẽ đề cập trong chương tiếp theo Những khác biệt này làm cho 8 tệ hơn 6 hầu hết thời gian. Các biến cấp độ khối là một điều tuyệt vời. Đó là lý do tại sao 6 đã được giới thiệu trong tiêu chuẩn từ lâu và hiện là một cách chính (cùng với 7) để khai báo một biến
Tại sao chúng ta không nên sử dụng var trong js?Tôi có nên sử dụng var trong JavaScript không?Sự thật là không ai nên sử dụng var trong bất kỳ mã JavaScript nào ngoại trừ bài học lịch sử . Thậm chí sau đó, nó sẽ đi kèm với một chú thích có nội dung như "làm ơn đừng bao giờ làm điều này. " Let và const đã có mặt trên mọi trình duyệt chính trong 6 năm qua. |