Hướng dẫn should you use var in javascript - bạn có nên sử dụng var trong javascript không

Hướng dẫn should you use var in javascript - bạn có nên sử dụng var trong javascript không

Từ khóa var là cách đầu tiên của JavaScript để khai báo một biến. Nó phù hợp, phải không? Var, biến, nó trong tên. Nhưng giống như Joker, var là nhiều hơn khuôn mặt xinh đẹp - nó có một số hành lý. Là một lập trình viên ban đầu, hoặc một người dày dạn nhúng ngón chân vào sự phát triển của JavaScript, bạn có thể tự hỏi khi nào bạn nên sử dụng var để khai báo các đối tượng và chức năng JavaScript của bạn.

Không bao giờ sợ hãi. Tôi có 3 lý do để bạn sử dụng var trong dự án JavaScript tiếp theo của bạn.

Bạn yêu thích truyền thống và gây ra bất cứ điều gì mới

VAR có thể là từ khóa lâu đời nhất để khai báo một biến, nhưng cho đến nay nó là thanh duy nhất. Đó là anh em họ, letconst đã bùng nổ trên hiện trường với ES6 (hơn 6 năm trước khi viết bài này!). Nhưng nếu gắn bó với các tiêu chuẩn cũ đầy nguy hiểm là điều của bạn, hãy tiếp tục sử dụng var và để lại những từ khóa mới nổi này để nghe nhạc pop khủng khiếp của họ và phàn nàn về cha mẹ của họ.

Bạn thích tính đột biến, ngay cả khi bạn không

VAR có sự phân biệt rắc rối là tạo một biến thuộc bất kỳ loại nào, sau đó có thể được thay đổi thành một biến thuộc bất kỳ loại nào sau này. Đúng vậy, số bạn đã khai báo trên dòng 4 chỉ trở thành một chuỗi trên dòng 17 và Boolean trên dòng 109. Tính linh hoạt của loại này là một tính năng chính của JavaScript, nhưng nó có thể tránh được. Nhưng nếu bạn quá thích sống một cách nguy hiểm, hãy tiếp tục sử dụng var.

Bạn thích phạm vi rò rỉ

Trước ES6, các biến JavaScript luôn được xác định ở phạm vi hàm. Trong rất nhiều trường hợp, điều này có nghĩa là các biến là toàn cầu. JavaScript đã không thực thi các phạm vi cấp độ khối như bên trong khối for hoặc

function f(x) {
    let y = 1;
    if (x > 0) {
        let y = 2;  // `let` declares a variable in this block
    }
    return y;
}
[f(1), f(-1)]  // --> [1, 1]

// Start over, but change `let` to `var`.
// --> [2, 1]
0. Vì vậy, một biến được khai báo với var sẽ được nâng lên trên đỉnh của phạm vi chức năng của nó. Nói cách khác, khai báo biến đã chuyển sang đầu môi trường từ vựng hiện tại với giá trị
function f(x) {
    let y = 1;
    if (x > 0) {
        let y = 2;  // `let` declares a variable in this block
    }
    return y;
}
[f(1), f(-1)]  // --> [1, 1]

// Start over, but change `let` to `var`.
// --> [2, 1]
2. Một vấn đề phổ biến phát sinh từ việc nâng cao là các biến như vậy có thể truy cập được ngoài phạm vi khối, nơi nhà phát triển có thể không mong đợi chúng.

Một người tinh vi và khó phát hiện lỗi hơn cũng có thể xảy ra ở đây, bóng tối thay đổi. Hiếm khi điều này có thể được mong muốn. Nếu đó là bạn, var là anh hùng của bạn.

Phải có cách tốt hơn

Nếu bạn đã làm được điều đó đến nay, có lẽ bạn đã tìm ra một bình luận khốc liệt về cách tôi sai về var. Sự thật là, không ai nên sử dụng var trong bất kỳ mã JavaScript nào ngoại trừ một bài học lịch sử. Ngay cả sau đó, nó nên đi kèm với một chú thích nói điều gì đó như: "Xin đừng bao giờ làm điều này."

function f(x) {
    let y = 1;
    if (x > 0) {
        let y = 2;  // `let` declares a variable in this block
    }
    return y;
}
[f(1), f(-1)]  // --> [1, 1]

// Start over, but change `let` to `var`.
// --> [2, 1]
6 và const đã có sẵn trong mọi trình duyệt lớn trong 6 năm qua. Đây thực sự, thực sự cổ xưa trong những năm trước. var không chỉ là cha mẹ hiểu lầm thiếu niên của họ, đó là ông bà tuyệt vời mà mọi người yêu thích nhưng không ai mời đến các bữa tiệc vui vẻ.

function f(x) {
    let y = 1;
    if (x > 0) {
        let y = 2;  // `let` declares a variable in this block
    }
    return y;
}
[f(1), f(-1)]  // --> [1, 1]

// Start over, but change `let` to `var`.
// --> [2, 1]
6 giữ lại hệ thống loại linh hoạt của JavaScript trong khi cho phép phân tán khối. var0 tạo ra một-bạn đoán nó-biến không đổi trong phạm vi khối. var0 tạo ra một biến không thể được chỉ định lại, nhưng tương tự như hầu hết các ngôn ngữ khác, các đối tượng const có thể có các thuộc tính của chúng bị đột biến. Hai lựa chọn thay thế cho var sẽ bao gồm mọi trường hợp sử dụng bạn có. Ngay cả khi bạn đang ở trong vị trí khó khăn của việc cần hỗ trợ các trình duyệt thực sự cổ xưa, đừng sử dụng var. Sử dụng một công cụ như Babel.

Vì vậy, xin vui lòng, xin vui lòng, đừng sử dụng var.

Doug Crockford thảo luận về let tại thời điểm này trong cuộc nói chuyện của mình, "Phần tốt hơn".

Vấn đề là, let tránh một nguồn hiểu lầm, đặc biệt. Đối với các lập trình viên có kỳ vọng được đặt bởi các ngôn ngữ với phạm vi khối. Một var có phạm vi chức năng (nó tuyên bố một biến hiển thị trong toàn bộ hàm) mặc dù có vẻ như nó có phạm vi khối.

var có thể vẫn có thể hữu ích trong một trường hợp cực đoan như mã do máy tạo ra, nhưng tôi đang kéo dài ở đó.

. Sửa đổi đối tượng var5 trừ khi bạn đóng băng nó.)

Trên thực tế, ấn tượng của bạn là đúng với ES6: Áp dụng letconst. Ngừng sử dụng var.Adopt let and const. Stop using var.

.


Một ví dụ tiết lộ

Mạng phát triển Mozilla đưa ra một ví dụ trong đó var không hoạt động như dự định. Ví dụ của họ là một ví dụ thực tế đặt trình xử lý var4 trong một trang web. Đây là một trường hợp thử nghiệm nhỏ hơn:

var a = [];
(function () {
   'use strict';
   for (let i = 0; i < 5; ++i) { // *** `let` works as expected ***
     a.push( function() {return i;} );
   }
} ());
console.log(a.map( function(f) {return f();} ));
// prints [0, 1, 2, 3, 4]

// Start over, but change `let` to `var`.
// prints [5, 5, 5, 5, 5]

var hướng dẫn chúng tôi lên vì tất cả các lần lặp vòng lặp đều chia sẻ cùng một biến var6 có chức năng, có giá trị var7 sau khi kết thúc vòng lặp.


Một ví dụ khác

function f(x) {
    let y = 1;
    if (x > 0) {
        let y = 2;  // `let` declares a variable in this block
    }
    return y;
}
[f(1), f(-1)]  // --> [1, 1]

// Start over, but change `let` to `var`.
// --> [2, 1]

let khai báo các biến có khối khối. var làm chúng tôi bối rối bằng cách đề cập đến cùng một biến trong toàn bộ chức năng.

Chúng ta có cần sử dụng var mà JavaScript này không?

Từ khóa VAR không bao giờ là "cần thiết".Tuy nhiên, nếu bạn không sử dụng nó thì biến mà bạn đang khai báo sẽ được phơi bày trong phạm vi toàn cầu (nghĩa là là một thuộc tính trên đối tượng cửa sổ).. However if you don't use it then the variable that you are declaring will be exposed in the global scope (i.e. as a property on the window object).

Tôi nên sử dụng var hoặc cho hoặc const trong javascript?

Các khai báo VAR được phạm vi toàn cầu hoặc chức năng phạm vi trong khi LET và const được phân chia khối.Các biến VAR có thể được cập nhật và khai báo lại trong phạm vi của nó;Để các biến có thể được cập nhật nhưng không được khai báo lại;Các biến const không thể được cập nhật cũng như không được khai báo.Họ đều được nâng lên đỉnh phạm vi của họ.. var variables can be updated and re-declared within its scope; let variables can be updated but not re-declared; const variables can neither be updated nor re-declared. They are all hoisted to the top of their scope.