Const trong JavaScript: khi nào nên sử dụng nó và có cần thiết không?


349

Gần đây tôi đã bắt gặp consttừ khóa trong JavaScript. Từ những gì tôi có thể nói, nó được sử dụng để tạo các biến không thay đổi và tôi đã thử nghiệm để đảm bảo rằng nó không thể được xác định lại (trong Node.js):

const x = 'const';
const x = 'not-const';

// Will give an error: 'constant 'x' has already been defined'

Tôi nhận ra rằng nó chưa được chuẩn hóa trên tất cả các trình duyệt - nhưng tôi chỉ quan tâm đến bối cảnh của Node.js V8 và tôi nhận thấy rằng các nhà phát triển / dự án nhất định dường như rất thích nó khi vartừ khóa có thể được sử dụng cho cùng tác dụng.

Vì vậy, câu hỏi của tôi là:

  • Khi nào thì thích hợp để sử dụng constthay varthế?
  • Có nên sử dụng nó mỗi khi một biến không được gán lại được khai báo không?
  • Nó thực sự làm cho bất kỳ sự khác biệt nếu varđược sử dụng thay thế consthoặc ngược lại?

1
Điều đó dường như chưa được chuẩn hóa (có thể trong EC6?). Bạn sẽ tìm thấy thông tin bổ sung về nó ở đây: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
mẹo

1
Const có hiệu suất kém mặc dù jsperf.com/const-vs-var-mod-3
Deepu 30/03/2016

Câu trả lời:


462

Có hai khía cạnh cho câu hỏi của bạn: các khía cạnh kỹ thuật của việc sử dụng constthay vì varvà các khía cạnh liên quan đến con người khi làm như vậy là gì.

Sự khác biệt kỹ thuật là đáng kể. Trong các ngôn ngữ được biên dịch, một hằng số sẽ được thay thế tại thời gian biên dịch và việc sử dụng nó sẽ cho phép các tối ưu hóa khác như loại bỏ mã chết để tăng thêm hiệu quả thời gian chạy của mã. Các công cụ JavaScript gần đây (được sử dụng một cách lỏng lẻo) thực sự biên dịch mã JS để có hiệu suất tốt hơn, vì vậy sử dụng từ khóa const sẽ thông báo cho họ rằng các tối ưu hóa được mô tả ở trên là có thể và nên được thực hiện. Điều này dẫn đến hiệu suất tốt hơn.

Khía cạnh liên quan đến con người là về ngữ nghĩa của từ khóa. Một biến là một cấu trúc dữ liệu có chứa thông tin dự kiến ​​sẽ thay đổi. Hằng số là cấu trúc dữ liệu chứa thông tin sẽ không bao giờ thay đổi. Nếu có chỗ cho lỗi, varnên luôn luôn được sử dụng. Tuy nhiên, không phải tất cả thông tin không bao giờ thay đổi trong vòng đời của chương trình cần phải được khai báo const. Nếu trong các trường hợp khác nhau, thông tin sẽ thay đổi, hãy sử dụng varđể chỉ ra rằng, ngay cả khi thay đổi thực tế không xuất hiện trong mã của bạn.


4
Chúc mừng, tôi cho rằng Mozilla / Google sẽ không thêm hỗ trợ const cho các công cụ JS mà không có lý do. Tôi sẽ đảm bảo sử dụng const khi áp dụng.
axdg

6
constcác đối tượng dường như có thể thay đổi, vì vậy tôi không chắc trình biên dịch JS thực sự nghiêm ngặt đến mức nào. Có lẽ chế độ "sử dụng nghiêm ngặt" cũng tạo nên sự khác biệt.
Rudie

9
@Rudie Tính năng bạn đang tìm kiếm được gọi là đóng băng đối tượng. constchỉ ngăn chặn việc gán lại "biến" cho giá trị khác. const a = {}; a = {};sẽ ném một lỗi trong chế độ nghiêm ngặt.
Tibos

Tôi sử dụng const nói chung thay vì cho hầu hết các biến, giống như trong Java tôi thêm cuối cùng vào hầu hết các khai báo biến.
mã hóa

2
If there is room for error, var should always be used. Ngày nay, điều này không còn được áp dụng nữa, với các công cụ như ESLint chỉ ra constvi phạm ngay lập tức.
Vitaly-t

72

Cập nhật 2017

Câu trả lời này vẫn nhận được rất nhiều sự quan tâm. Điều đáng chú ý là câu trả lời này đã được đăng lại vào đầu năm 2014 và rất nhiều điều đã thay đổi kể từ đó.hỗ trợ bây giờ là tiêu chuẩn. Tất cả các trình duyệt hiện đại đều hỗ trợ constnên khá an toàn khi sử dụng mà không gặp vấn đề gì.


Câu trả lời gốc từ năm 2014

Mặc dù có hỗ trợ trình duyệt khá tốt , tôi vẫn tránh sử dụng nó ngay bây giờ. Từ bài viết của MDN vềconst :

Việc triển khai const hiện tại là một tiện ích mở rộng dành riêng cho Mozilla và không phải là một phần của ECMAScript 5. Nó được hỗ trợ trong Firefox & Chrome (V8). Kể từ Safari 5.1.7 và Opera 12.00, nếu bạn xác định một biến có const trong các trình duyệt này, bạn vẫn có thể thay đổi giá trị của nó sau này. Nó không được hỗ trợ trong Internet Explorer 6-10, nhưng được bao gồm trong Internet Explorer 11. Từ khóa const hiện khai báo hằng số trong phạm vi hàm (như các biến được khai báo với var).

Sau đó nó tiếp tục nói:

constsẽ được định nghĩa bởi ECMAScript 6, nhưng với các ngữ nghĩa khác nhau. Tương tự như các biến được khai báo bằng câu lệnh let, các hằng số được khai báo với const sẽ nằm trong phạm vi khối.

Nếu bạn sử dụng, constbạn sẽ phải thêm một cách giải quyết để hỗ trợ các trình duyệt cũ hơn một chút.


6
Câu trả lời tuyệt vời - mặc dù tôi đã đọc bài viết về MDN. Như tôi đã nói, tôi quan tâm nhiều hơn đến việc V8 đặc biệt sẽ thực sự đối xử với const khác với var. Tôi nghĩ rằng @Tibos đã xóa nó.
axdg

James cảm ơn vì đã chỉ ra khía cạnh hỗ trợ. imho tất cả các câu trả lời javascript nên bao gồm một sự cố hỗ trợ trình duyệt. giải thích độc đáo
hubson bropa

4
Note ES6 đã nhận được tính năng đóng băng vào tháng 8 năm 2014. Vào tháng 7 năm 2015, tiêu chuẩn đã được phát hành chính thức. Nếu bạn đang đọc điều này bây giờ, điều đó có nghĩa là bạn nên làm theo câu trả lời được chấp nhận như đã nêu nếu mã của bạn được quản lý bởi một công cụ cập nhật.
Filip Dupanović

Câu hỏi OP là cụ thể của node.js
Nicu Surdu

@NicolaeSurdu chắc chắn. Đó cũng là từ tháng 1 năm 2014, vì vậy có lẽ hầu hết là dư thừa vào năm 2017.
James Donnelly

41

Vì sao nên sử dụng const, câu trả lời tuyệt vời của @ Tibos.

Nhưng bạn nói:

Từ những gì tôi có thể nói, nó được sử dụng để tạo ra các biến không thay đổi

Điều đó là sai . Đột biến một biến khác với gán lại:

var hello = 'world' // assigning
hello = 'bonjour!' // reassigning

Với const, bạn không thể làm điều đó:

const hello = 'world'
hello = 'bonjour!' // error

Nhưng bạn có thể biến đổi biến của bạn:

const marks = [92, 83]
marks.push(95)
console.log(marks) // [92, 83, 95] -> the variable has been mutated.

Vì vậy, bất kỳ quá trình thay đổi giá trị của biến mà không sử dụng =dấu hiệu đều làm thay đổi biến.

Lưu ý: +=ví dụ là ... gán lại!

var a = 5
a += 2 // is the same as a = a + 2

Vì vậy, điểm mấu chốt là: constkhông ngăn bạn biến đổi các biến, nó ngăn bạn gán lại chúng.


4
tuyên bố của bạn "bất kỳ quá trình thay đổi giá trị của biến mà không sử dụng =dấu hiệu bị tắt" là sai về mặt kỹ thuật. Ví dụ, const marks=[92,83]; marks[2]=95; console.log(marks)sẽ xuất ra [92, 83, 95]. marksđã được đột biến, thông qua dấu bằng.
chharvey

5
"Nhưng bạn đã nói: << Từ những gì tôi có thể nói, nó được sử dụng để tạo các biến bất biến >> Điều đó là sai . Đột biến một biến khác với việc gán lại" Không, không phải vậy. Tái chỉ định là đột biến biến. Bạn đang nói về việc làm biến đổi đối tượng mà tham chiếu trong biến đề cập đến. Đó là một điều hoàn toàn khác.
TJ Crowder

Đến đây vì tôi đang cố gắng hiểu consttrong bối cảnh của mảng (tương tự như ví dụ @chharvey đã sử dụng). Trong trường hợp của const countArray = countup(n - 1); countArray.push(n);các constlà tái phân công mỗi lần. Vậy tại sao nên sử dụng constvà không var?
YCode

1
@ Mã số không. Khi bạn sử dụng const countArray, nó sẽ không bao giờ được chỉ định lại. Bạn vẫn có thể đẩy vào mảng, thay đổi thành viên và độ dài của nó, nhưng chúng tôi không gọi đó là việc gán lại. bạn sử dụng constthay vì lethoặc varkhi bạn muốn ngăn chặn việc gán lại. BTW nếu bạn làm muốn cho phép giao lại, lethầu như luôn luôn tốt hơn so với var.
chharvey

@chharvey Cảm ơn! Phản hồi của bạn đã đưa tôi đến "vượt qua giá trị so với vượt qua tham chiếu", một khái niệm mới và một khái niệm lạ - trong đó việc sửa đổi giá trị xác định lại. Bất cứ ai cần giải thích thêm nên kiểm tra câu trả lời tại đây: stackoverflow.com/q/46131828/5965865
YCode

38

Để tích hợp các câu trả lời trước đó, có một lợi thế rõ ràng trong việc khai báo các biến không đổi, ngoài lý do hiệu suất: nếu bạn vô tình cố gắng thay đổi hoặc khai báo lại chúng trong mã, chương trình sẽ không thay đổi giá trị hoặc ném lỗi.

Ví dụ: so sánh:

// Will output 'SECRET'

const x = 'SECRET'
if (x = 'ANOTHER_SECRET') {  // Warning! assigning a value variable in an if condition
    console.log (x)
}

với:

// Will output 'ANOTHER_SECRET'

var y = 'SECRET'
if (y = 'ANOTHER_SECRET') { 
    console.log (y)
}

hoặc là

// Will throw TypeError: const 'x' has already been declared

const x = "SECRET"

/*  complex code */

var x = 0

với

// Will reassign y and cause trouble

var y = "SECRET"

/*  complex code */

var y = 0

Bạn nên nói rằng hành vi "bất biến" này chỉ áp dụng cho Chuỗi, Loại cơ bản. Sử dụng Đối tượng, Mảng, v.v. có thể thay đổi các giá trị nhưng không thể gán lại một "Đối tượng" mới, ví dụ const a = ["a", "b"]; a = []; sẽ đưa ra một lỗi nếu không nó có thể xảy ra
Fer đến

Bạn nên có một ví dụ nơi bạn cố gắng và thay đổi giá trị của hằng số.
Joshua Pinter

Sử dụng const rất giống như sửa đổi truy cập, tính bất biến thực sự không phải là mục tiêu.
StingyJack

32

constkhông phải là bất biến.

Từ MDN :

Khai báo const tạo một tham chiếu chỉ đọc đến một giá trị. Điều đó không có nghĩa là giá trị mà nó giữ là bất biến, chỉ là định danh biến không thể được gán lại.


24
Đó là một chút sai lầm mặc dù. Đối với số, chuỗi, boolean, vv (nguyên thủy) constlà bất biến. Đối với các đối tượng và mảng, nó không thể được chỉ định lại, nhưng nội dung có thể được thay đổi (ví dụ: Array.push).
Florian Wendelborn

2
Nguyên thủy JS luôn luôn bất biến. Cho dù bạn sử dụng consthay không không ảnh hưởng đến điều đó.
12Me21

1
@Dodekeract do đó không phải là bất biến theo định nghĩa. Nếu các giá trị có thể thay đổi thì đó không phải là bất biến, mặc dù nó hoạt động như bất biến đối với các nguyên thủy bạn đã liệt kê
Anthony

13

var : Khai báo một biến, khởi tạo giá trị tùy chọn.

let : Khai báo một biến cục bộ với phạm vi khối.

const : Khai báo hằng số chỉ đọc.

Ví dụ:

var a;
a = 1;
a = 2;//re-initialize possible
var a = 3;//re-declare
console.log(a);//3

let b;
b = 5;
b = 6;//re-initiliaze possible
// let b = 7; //re-declare not possible
console.log(b);

// const c;
// c = 9;   //initialization and declaration at same place
const c = 9;
// const c = 9;// re-declare and initialization is not possible
console.log(c);//9
// NOTE: Constants can be declared with uppercase or lowercase, but a common
// convention is to use all-uppercase letters.

10

Bạn có câu trả lời tuyệt vời, nhưng hãy giữ nó đơn giản.

const nên được sử dụng khi bạn có hằng số xác định (đọc là: nó sẽ không thay đổi trong khi thực hiện chương trình của bạn).

Ví dụ:

const pi = 3.1415926535

Nếu bạn nghĩ rằng đó là một cái gì đó có thể được thay đổi trong lần thực hiện sau thì hãy sử dụng a var.

Sự khác biệt thực tế, dựa trên ví dụ, là với constbạn sẽ luôn cho rằng số pi sẽ là 3,14 [...], đó là sự thật.

Nếu bạn xác định nó là a var, nó có thể là 3.14 [...] hoặc không.

Đối với một câu trả lời kỹ thuật hơn @Tibos là đúng về mặt học thuật.


7

Theo kinh nghiệm của tôi, tôi sử dụng const khi tôi muốn thiết lập một cái gì đó mà tôi có thể muốn thay đổi sau đó mà không phải tìm kiếm mã tìm kiếm các bit đã được mã hóa cứng, ví dụ: Đường dẫn tệp hoặc tên máy chủ.

Lỗi trong thử nghiệm của bạn là một điều khác, mặc dù vậy, bạn đang cố gắng tạo một biến khác gọi là x, đây sẽ là một thử nghiệm chính xác hơn.

const x = 'const';
x = 'not-const';

9
Tôi hiểu ý của bạn, nhưng - thật buồn cười là "hằng số" đối với bạn có nghĩa là "điều tôi có thể muốn thay đổi". : P
Venryx

4

Sở thích cá nhân thực sự. Bạn có thể sử dụng const khi, như bạn nói, nó sẽ không được gán lại và không đổi. Ví dụ nếu bạn muốn chỉ định ngày sinh nhật của bạn. Sinh nhật của bạn không bao giờ thay đổi, vì vậy bạn có thể sử dụng nó như một hằng số. Nhưng tuổi của bạn không thay đổi nên đó có thể là một biến số.


17
Đó sẽ là một kịch bản rất dài!
nullability

3
@nullability Phụ thuộc vào số lượng người bạn đang theo dõi. Hơn một vài chục và kịch bản sẽ không phải chạy dài :).
Millie Smith

4

Tóm lược:

const tạo ra một ý nghĩa ràng buộc bất biến định danh const const không được gán lại.

const a = "value1";

bạn không thể gán lại nó với

a = "value2";

Tuy nhiên, nếu định danh const giữ một đối tượng hoặc một mảng, giá trị của nó có thể được thay đổi khi chúng ta không gán lại nó.

const x = { a: 1 }

x.a = 2; //is possible and allowed

const numbers = [1, 2];
numbers.push(3); //is possible and allowed

Xin lưu ý rằng const là một khối có phạm vi giống như cho phép không giống như var (có phạm vi chức năng)

Nói tóm lại, khi một cái gì đó không có khả năng thay đổi thông qua việc gán lại, sử dụng const const sử dụng let hoặc var tùy thuộc vào phạm vi bạn muốn có.

Lý do dễ dàng hơn nhiều về mã khi nó đã chết rõ ràng những gì có thể được thay đổi thông qua việc gán lại và những gì không thể. Thay đổi một const thành cho phép là chết đơn giản. Và mặc định const làm cho bạn suy nghĩ hai lần trước khi làm như vậy. Và đây là trong nhiều trường hợp một điều tốt.



2
Main point is that how to decide which one identifier should be used during development.
In java-script here are three identifiers.

1. var (Can re-declared & re-initialize)
2. const (Can't re-declared & re-initialize, can update array values by using push)
3. let (Can re-initialize but can't re-declare)

'var': Tại thời điểm mã hóa khi chúng ta nói về tiêu chuẩn mã, chúng ta thường sử dụng tên của mã định danh mà người dùng / nhà phát triển khác dễ hiểu. Ví dụ: nếu chúng tôi đang làm việc nghĩ nhiều chức năng trong đó chúng tôi sử dụng một số đầu vào và xử lý này và trả về một số kết quả, như:

**Example of variable use**

function firstFunction(input1,input2)
{
 var process = input1 + 2; 
 var result = process - input2;
 return result;
}


function otherFunction(input1,input2)
{
 var process = input1 + 8; 
 var result = process * input2;
 return result;
}

Trong các ví dụ trên, cả hai hàm tạo ra 2 kết quả khác nhau nhưng sử dụng cùng tên biến. Ở đây chúng ta có thể thấy cả 'process' & 'result' đều được sử dụng làm biến số và chúng nên như vậy.

 **Example of constant with variable**

 const tax = 10; 
 const pi = 3.1415926535; 

function firstFunction(input1,input2)
{
 var process = input1 + 2; 
 var result = process - input2;
 result = (result * tax)/100; 
 return result;
}


function otherFunction(input1,input2)
{
 var process = input1 + 8; 
 var result = process * input2 * pi;
 return result;
}

Trước khi sử dụng 'let' trong java-script, chúng ta phải thêm 'userict' trên đầu tệp js

 **Example of let with constant & variable**

 const tax = 10; 
 const pi = 3.1415926535; 
 let trackExecution = '';

function firstFunction(input1,input2)
{
 trackExecution += 'On firstFunction'; 
 var process = input1 + 2; 
 var result = process - input2;
 result = (result * tax)/100; 
 return result;
}


function otherFunction(input1,input2)
{
 trackExecution += 'On otherFunction'; # can add current time 
 var process = input1 + 8; 
 var result = process * input2 * pi;
 return result;
}

 firstFunction();
 otherFunction();
 console.log(trackExecution);

Trong ví dụ trên, bạn có thể theo dõi một chức năng nào được thực thi khi & chức năng nào không được sử dụng trong hành động cụ thể.


1

Đầu tiên, ba điều hữu ích về const(ngoài các cải tiến phạm vi mà nó chia sẻ let):

  • Nó tài liệu cho những người đọc mã sau đó rằng giá trị không được thay đổi.
  • Nó ngăn bạn (hoặc bất kỳ ai đến sau bạn) thay đổi giá trị trừ khi họ quay lại và thay đổi tuyên bố có chủ ý.
  • có thể lưu công cụ JavaScript một số phân tích về mặt tối ưu hóa. Ví dụ: bạn đã tuyên bố rằng giá trị không thể thay đổi, vì vậy động cơ không phải thực hiện công việc để tìm hiểu xem giá trị có thay đổi hay không để nó có thể quyết định có tối ưu hóa hay không dựa trên giá trị không thay đổi.

Những câu hỏi của bạn:

Khi nào thì thích hợp để sử dụng constthay varthế?

Bạn có thể làm điều đó bất cứ khi nào bạn khai báo một biến có giá trị không bao giờ thay đổi. Cho dù bạn cho rằng điều đó phù hợp hoàn toàn tùy thuộc vào sở thích của bạn / sở thích của nhóm bạn.

Có nên sử dụng nó mỗi khi một biến không được gán lại được khai báo không?

Điều đó tùy thuộc vào bạn / nhóm của bạn.

Nó thực sự làm cho bất kỳ sự khác biệt nếu var is used in place ofconst` hoặc ngược lại?

Đúng:

  • varconstcó các quy tắc phạm vi khác nhau. (Bạn có thể muốn so sánh với letchứ không phải var.) Cụ thể: constletcó phạm vi khối và khi được sử dụng ở phạm vi toàn cầu, không tạo các thuộc tính trên đối tượng toàn cầu (ngay cả khi chúng tạo toàn cục). varcó phạm vi toàn cầu (khi được sử dụng ở phạm vi toàn cầu) hoặc phạm vi chức năng (ngay cả khi được sử dụng trong một khối) và khi được sử dụng ở phạm vi toàn cầu, sẽ tạo một thuộc tính trên đối tượng toàn cầu.
  • Xem "ba điều hữu ích" của tôi ở trên, tất cả đều áp dụng cho câu hỏi này.

1

Các ngữ nghĩa của varlet

varletlà một tuyên bố cho máy và cho các lập trình viên khác:

Tôi dự định rằng giá trị của nhiệm vụ này thay đổi trong quá trình thực hiện. Đừng dựa vào giá trị cuối cùng của nhiệm vụ này.

Ý nghĩa của việc sử dụng varlet

varletbuộc các lập trình viên khác đọc tất cả các mã can thiệp từ khai báo đến sử dụng cuối cùng và lý do về giá trị của phép gán tại thời điểm đó trong quá trình thực thi của chương trình.

Chúng làm suy yếu lý do máy cho ESLint và các dịch vụ ngôn ngữ khác để phát hiện chính xác các tên biến bị nhầm lẫn trong các bài tập sau và sử dụng lại phạm vi của các tên biến phạm vi bên ngoài trong đó phạm vi bên trong quên khai báo.

Chúng cũng gây ra thời gian chạy nhiều lần lặp trên tất cả các loại tiền mã hóa để phát hiện ra rằng chúng thực sự là các hằng số, trước khi chúng có thể tối ưu hóa chúng. Mặc dù đây là một vấn đề ít hơn so với phát hiện lỗi và tính dễ hiểu của nhà phát triển.

Khi nào sử dụng const

Nếu giá trị của tham chiếu không thay đổi trong quá trình thực hiện, cú pháp đúng để thể hiện ý định của lập trình viên là const. Đối với các đối tượng, việc thay đổi giá trị của tham chiếu có nghĩa là trỏ đến một đối tượng khác, vì tham chiếu là bất biến, nhưng đối tượng thì không.

" const" đối tượng

Đối với các tham chiếu đối tượng, con trỏ không thể được thay đổi thành một đối tượng khác, nhưng đối tượng được tạo và gán cho một constkhai báo có thể thay đổi. Bạn có thể thêm hoặc xóa các mục khỏi một constmảng được tham chiếu và thay đổi các khóa thuộc tính trên một constđối tượng được tham chiếu.

Để đạt được các đối tượng bất biến (một lần nữa, làm cho mã của bạn dễ hiểu hơn về con người và máy móc), bạn có thể Object.freezeđối tượng khai báo / gán / tạo, như sau:

const Options = Object.freeze(['YES', 'NO'])

Object.freeze có ảnh hưởng đến hiệu suất, nhưng mã của bạn có thể chậm vì các lý do khác. Bạn muốn hồ sơ nó.

Bạn cũng có thể gói gọn đối tượng có thể thay đổi trong máy trạng thái và trả về các bản sao sâu dưới dạng giá trị (đây là cách hoạt động của trạng thái Redux và React). Xem Tránh trạng thái toàn cầu có thể thay đổi trong Trình duyệt JS để biết ví dụ về cách xây dựng trạng thái này từ các nguyên tắc đầu tiên.

Khi nào varletlà một trận đấu tốt

letvarđại diện cho trạng thái đột biến. Theo tôi, chúng chỉ nên được sử dụng để mô hình hóa trạng thái đột biến thực tế . Những thứ như " kết nối còn sống? ".

Đây là những gói được đóng gói tốt nhất trong các máy trạng thái có thể kiểm tra hiển thị các giá trị không đổi đại diện cho " trạng thái hiện tại của kết nối ", là hằng số tại bất kỳ thời điểm nào và phần còn lại của mã của bạn thực sự quan tâm.

Lập trình đã đủ khó với việc soạn thảo các hiệu ứng phụ và chuyển đổi dữ liệu. Biến mọi chức năng thành một máy trạng thái không thể kiểm soát bằng cách tạo trạng thái có thể thay đổi với các biến chỉ chồng chất lên độ phức tạp.

Để giải thích nhiều sắc thái hơn, xem Shun the Mutant - Trường hợp choconst .



0

Tôi không phải là một chuyên gia trong kinh doanh biên dịch JS, nhưng thật hợp lý khi nói rằng v8 sử dụng từ cờ const

Thông thường a sau khi khai báo và thay đổi một loạt các biến, bộ nhớ bị phân mảnh và v8 dừng để thực thi, tạm dừng một vài giây để tạo gc hoặc thu gom rác.

nếu một biến được khai báo với const v8 có thể tự tin đặt nó vào một thùng chứa kích thước cố định chặt chẽ giữa các biến const khác, vì nó sẽ không bao giờ thay đổi. Nó cũng có thể lưu các hoạt động thích hợp cho các kiểu dữ liệu đó vì kiểu sẽ không thay đổi.


0

Khi đi đến quyết định giữa letconst , luôn luôn thích const để việc sử dụng được rõ ràng trong mã. Bằng cách đó, nếu bạn cố gắng xác định lại biến, bạn sẽ gặp lỗi. Nếu không có lựa chọn nào khác ngoài việc tái phân phối nó, chỉ cần chuyển sang cho phép . Lưu ý rằng, như Anthony nói, các giá trị không phải là bất biến (ví dụ: một hằng số đối tượng có thể có các thuộc tính bị đột biến).

Khi nói đến var , vì ES6 không hoạt động, tôi không bao giờ sử dụng nó trong mã sản xuất và không thể nghĩ ra trường hợp sử dụng cho nó. Tuy nhiên, hãy cẩn thận rằng các biến được khai báo với var không có phạm vi khối.

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.