Javascript ES6 xuất const vs export let


148

Hãy nói rằng tôi có một biến mà tôi muốn xuất. Sự khác biệt giữa

export const a = 1;

đấu với

export let a = 1;

Tôi hiểu sự khác biệt giữa constlet, nhưng khi bạn xuất chúng, sự khác biệt là gì?


exportchi tiết từ khóa ở đây . Hiện tại nó không được hỗ trợ bởi bất kỳ trình duyệt web nào.
RBT

Câu trả lời:


246

Trong ES6, imports là các chế độ xem chỉ đọc trực tiếp trên các giá trị được xuất. Kết quả là, khi bạn làm import a from "somemodule";, bạn không thể gán cho adù bạn khai báo như thế nào atrong mô-đun.

Tuy nhiên, vì các biến được nhập là chế độ xem trực tiếp , nên chúng thay đổi theo biến xuất "thô" trong xuất khẩu. Hãy xem xét mã sau đây (mượn từ bài viết tham khảo bên dưới):

//------ lib.js ------
export let counter = 3;
export function incCounter() {
    counter++;
}

//------ main1.js ------
import { counter, incCounter } from './lib';

// The imported value `counter` is live
console.log(counter); // 3
incCounter();
console.log(counter); // 4

// The imported value can’t be changed
counter++; // TypeError

Như bạn có thể thấy, sự khác biệt thực sự nằm ở lib.js, không phải main1.js.


Để tóm tắt:

  • Bạn không thể gán importcác biến cho -ed, bất kể bạn khai báo các biến tương ứng trong mô-đun như thế nào.
  • Các truyền thống letnày so với constngữ nghĩa áp dụng cho các biến được khai báo trong module.
    • Nếu biến được khai báo const, nó không thể được gán lại hoặc bật lại ở bất cứ đâu.
    • Nếu biến được khai báo let, nó chỉ có thể được gán lại trong mô-đun (chứ không phải người dùng). Nếu nó được thay đổi, importbiến -ed thay đổi tương ứng.

Tham khảo: http://exploringjs.com/es6/ch_modules.html#leanpub-auto-in-es6-imports-are-live-read-only-view-on-exported-values


2

Tôi nghĩ rằng một khi bạn đã nhập nó, hành vi là như nhau (ở nơi biến của bạn sẽ được sử dụng bên ngoài tệp nguồn).

Sự khác biệt duy nhất sẽ là nếu bạn cố gắng gán lại nó trước khi kết thúc tập tin này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.