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 */
7Tê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ênGiố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 theolet { 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 */
4Việ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 */
17let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6Bạ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ốilet { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8Tuy 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 */
9Biế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ạoKhi ở 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únglet { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
7Thuậ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 TDZlet { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
9TDZ 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
let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
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 */
41let { 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 */
42let { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
1TDZ 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 */
2Khố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ờiHiệ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 */
3Khi đượ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áolet { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
4Tuy 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