Sử dụng let tốt hơn var javascript?

Khai báo

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 khai báo một biến cục bộ trong phạm vi khối, tùy chọn khởi tạo nó thành một giá trị

let name1 [= value1] [, name2 [= value2]] [, ..., nameN [= valueN]

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
7

Tên biến hoặc các biến cần khai báo. Mỗi cái phải là một mã định danh JavaScript hợp pháp

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8 Tùy chọn

Đối với mỗi biến được khai báo, bạn có thể tùy chọn chỉ định giá trị ban đầu của nó cho bất kỳ biểu thức JavaScript hợp pháp nào

Ngoài ra, cú pháp Gán cấu trúc cũng có thể được sử dụng để khai báo các biến

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 cho phép bạn khai báo các biến bị giới hạn trong phạm vi của câu lệnh khối hoặc biểu thức mà nó được sử dụng, không giống như từ khóa
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0, khai báo biến toàn cục hoặc cục bộ cho toàn bộ hàm bất kể phạm vi khối. Sự khác biệt khác giữa
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0 và
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 là cái sau chỉ có thể được truy cập sau khi đạt được khai báo của nó [xem ]. Vì lý do này, khai báo
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 thường được coi là không được nâng lên

Giống như

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 không tạo các thuộc tính của đối tượng
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
6 khi được khai báo trên toàn cầu [trong phạm vi trên cùng]

Có thể tìm thấy lời giải thích tại sao tên "let" được chọn tại đây

Có thể tránh được nhiều vấn đề với các biến

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 bằng cách khai báo chúng ở đầu phạm vi mà chúng được sử dụng [làm như vậy có thể ảnh hưởng đến khả năng đọc]

Không giống như

if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0,
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 bắt đầu. Điều đó có nghĩa là bạn không thể sử dụng một khai báo
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 đơn lẻ làm phần thân của một khối [điều này hợp lý vì không có cách nào để truy cập vào biến]

if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context

Các biến được khai báo bởi

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 có phạm vi của chúng trong khối mà chúng được khai báo, cũng như trong bất kỳ khối con nào được chứa. Bằng cách này,
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 hoạt động rất giống với
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0. Sự khác biệt chính là phạm vi của một biến
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0 là toàn bộ chức năng kèm theo

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
1

Ở mức cao nhất của chương trình và chức năng, ________ 06, không giống như ________ 60, không tạo thuộc tính trên đối tượng toàn cầu. Ví dụ

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
4

Việc khai báo lại cùng một biến trong cùng một chức năng hoặc phạm vi khối sẽ làm tăng

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
17

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6

Bạn có thể gặp lỗi trong câu lệnh

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
18 vì chỉ có một khối

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8

Tuy nhiên, điều quan trọng là phải chỉ ra rằng một khối được lồng bên trong một mệnh đề trường hợp sẽ tạo ra một môi trường từ vựng có phạm vi khối mới, môi trường này sẽ không tạo ra các lỗi khai báo lại được hiển thị ở trên

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
9

Biến

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 hoặc
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
4 được cho là nằm trong "vùng chết tạm thời" [TDZ] từ khi bắt đầu khối cho đến khi quá trình thực thi mã đến dòng nơi biến được khai báo và khởi tạo

Khi ở bên trong TDZ, biến chưa được khởi tạo với giá trị và bất kỳ nỗ lực nào để truy cập nó sẽ dẫn đến lỗi

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
41. Biến được khởi tạo với một giá trị khi thực thi đến dòng mã nơi nó được khai báo. Nếu không có giá trị ban đầu nào được chỉ định với khai báo biến, nó sẽ được khởi tạo với giá trị là
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
42

Điều này khác với các biến, sẽ trả về giá trị

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
42 nếu chúng được truy cập trước khi chúng được khai báo. Đoạn mã dưới đây cho thấy kết quả khác nhau khi truy cập
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 và
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0 trong đoạn mã trước dòng khai báo chúng

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
7

Thuật ngữ "thời gian" được sử dụng vì vùng phụ thuộc vào thứ tự thực hiện [thời gian] hơn là thứ tự viết mã [vị trí]. Ví dụ: mã bên dưới hoạt động vì mặc dù hàm sử dụng biến

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 xuất hiện trước khi biến được khai báo, nhưng hàm được gọi bên ngoài TDZ

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
9

TDZ và
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
48

Sử dụng toán tử

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
48 cho biến
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 trong TDZ của nó sẽ đưa ra kết quả
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
41

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
0

Điều này khác với việc sử dụng

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
48 cho các biến không được khai báo và các biến có giá trị là
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
42

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
1

TDZ kết hợp với phạm vi từ vựng

Đoạn mã sau dẫn đến một

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
41 tại dòng được hiển thị

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
2

Khối

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
65 được đánh giá vì
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
66 bên ngoài có giá trị. Tuy nhiên do phạm vi từ vựng, giá trị này không khả dụng bên trong khối. mã định danh
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
67 bên trong khối
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
65 là
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
69. Biểu thức
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
80 ném ra một
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
41 vì quá trình khởi tạo của
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
69 chưa hoàn thành — nó vẫn đang ở trong vùng chết tạm thời

Hiện tượng này có thể gây nhầm lẫn trong một tình huống như sau. Lệnh

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
83 đã nằm trong phạm vi riêng của khối vòng lặp for. Vì vậy, mã định danh
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
84 được phân giải thành thuộc tính '
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
85' của đối tượng '
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
86' nằm trong phần đầu tiên của chính lệnh [
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
87]

Điều này vẫn còn trong vùng chết tạm thời vì tuyên bố khai báo của nó chưa được đạt và kết thúc

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
3

Khi được sử dụng bên trong một khối,

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 giới hạn phạm vi của biến đối với khối đó. Lưu ý sự khác biệt giữa
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0, có phạm vi bên trong hàm nơi nó được khai báo

let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
4

Tuy nhiên, sự kết hợp giữa khai báo

if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0 và
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6 bên dưới là một
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
17 do
if [true] let a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
0 được cẩu lên trên cùng của khối. Điều này dẫn đến việc khai báo lại ngầm định của biến

Cái nào tốt hơn let hoặc var trong JavaScript?

var và let đều được sử dụng để khai báo biến trong javascript nhưng điểm khác biệt giữa chúng là var là phạm vi chức năng và let là phạm vi khối . Biến được khai báo bằng let không thể được khai báo lại và phải được khai báo trước khi sử dụng trong khi các biến được khai báo bằng từ khóa var được nâng lên.

Tôi có nên ngừng sử dụng var JavaScript không?

Nếu bạn chưa quen với JS hoặc đã sử dụng nó được một thời gian thì có thể phần lớn bạn đang sử dụng var để khai báo các biến của mình, điều đó không sao nhưng đó không phải là cách tốt nhất . .

Chủ Đề