2015-01-25 11 views
36

Khi io.js bây giờ supports ES6, bạn cuối cùng có thể sử dụng các từ khóa constlet. Rõ ràng, let là người kế thừa của var, chỉ với một số siêu quyền hạn.const so với khi gọi điện yêu cầu

Nhưng còn const thì sao? Tôi biết, tất nhiên, những gì "liên tục" có nghĩa là, nhưng tôi đã tự hỏi khi nào sử dụng nó (liên quan đến thực hành tốt nhất).

Ví dụ: nếu tôi tạo ra một mô-đun mà đòi hỏi mô-đun khác, tôi có thể viết:

'use strict'; 

const util = require('util'); 

const foo = function() { 
    // Do something with util 
}; 

module.exports = foo; 

Về cơ bản tôi đã thay thế tất cả các xuất hiện của var với const. Nói chung, tôi nghĩ rằng điều này là ổn, nhưng nếu tôi làm theo mô hình này, nó để lại cho tôi cách sử dụng nhiều hơn const hơn let, vì hầu hết các biến không phải là "biến" theo nghĩa đen.

Đây có phải là phong cách tốt không? Tôi có nên đi theo số let không? Khi nào tôi nên chọn const hơn let?

+1

Tôi mong đợi 'const' là tất cả trong mũ, ví dụ như' const KEY_A = 65' chẳng hạn. – elclanrs

+2

Cách tôi nghĩ về nó, đó là một 'const' nên được sử dụng nếu giá trị là không bao giờ được thay đổi, hoặc quan trọng hơn là bảo vệ khỏi sự thay đổi. 'let' nên được sử dụng khi giá trị được ghi đè/thay đổi sau đó, và cả hai nên được sử dụng khi bạn cần một biến có phạm vi khối, và không phải là một biến được phạm vi cho một hàm. Nếu bạn cần một biến có phạm vi hàm, 'var' vẫn có sẵn. Tôi có thể sai, đã không thực sự đọc trên ES6/2015 nhiều. – adeneo

+1

Khai báo 'util' thành' const' chỉ có nghĩa là biến đó không thể được đặt thành một giá trị khác. ** Tuy nhiên **, bạn vẫn có thể thêm, sửa đổi và loại bỏ các thuộc tính khỏi nó nếu nó không phải là nguyên thủy. – idbehold

Trả lời

35

const có thể được thường được sử dụng khi bạn không muốn chương trình của bạn

  1. gán bất cứ điều gì để biến

    "use strict"; 
    const a = 1; 
    a = 2; 
    

    sẽ sản xuất TypeError: Assignment to constant variable..

  2. để sử dụng biến mà không khởi tạo rõ ràng.

    "use strict"; 
    const a; 
    

    sẽ sản xuất SyntaxError: Unexpected token ;

một cách đơn giản, tôi sẽ nói,

  • sử dụng const bất cứ khi nào bạn muốn có một số biến không được sửa đổi

  • sử dụng let nếu bạn muốn đối diện chính xác của const

  • sử dụng var, nếu bạn muốn tương thích với triển khai ES5 hoặc nếu bạn muốn phạm vi cấp mô-đun/chức năng.

Sử dụng let chỉ khi bạn cần chặn cấp Phạm vi, nếu không sử dụng let hoặc var sẽ không thực hiện bất kỳ sự khác biệt.

+3

Trên thực tế, 'let' và' const' làm hoist, nhưng nó phức tạp hơn một chút: http://stackoverflow.com/q/31219420/3242070 –

+0

Tôi không nghĩ rằng nửa đầu của điều này là chính xác. Ví dụ với 'A_CONST' thực sự gây ra lỗi. 'const' và' let' cả hai đều hoist, nhưng phải tuân theo ["vùng chết tạm thời"] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let) vì vậy chúng không thể được sử dụng trước khi khai báo. – ZachB

+1

@ZachB Tôi đồng ý. Trong phòng thủ của tôi, 'const' được sử dụng để hành xử khác nhau trong chế độ cẩu thả. [Tham khảo] (https: // github.com/nodejs/node/pull/3152 # discussion_r41552676). Cảm ơn bạn đã chỉ ra, tôi đã xóa phần sai. – thefourtheye

6

Tôi có cùng cảm giác mà bạn mô tả. Một tỷ lệ lớn các biến được khai báo trong mã của tôi có xu hướng không đổi, thậm chí cả các đối tượng và mảng. Bạn có thể khai báo các đối tượng liên tục và mảng và vẫn có thể thay đổi chúng:

const arr = []; 
arr.push(1); 
arr; 
// [ 1 ] 

const obj = {}; 
obj.a = 1; 
obj; 
// { a: 1 } 

AFAIK ES6 modules không yêu cầu khai báo biến khi nhập khẩu, và tôi nghi ngờ rằng io.js will move to ES6 modules in a near future.

Tôi nghĩ đây là lựa chọn cá nhân. Tôi luôn luôn sử dụng const khi yêu cầu mô-đun và cho các biến địa phương mô-đun (foo trong ví dụ của bạn). Đối với phần còn lại của các biến, sử dụng const một cách thích hợp, nhưng không bao giờ phát điên và sử dụng const ở khắp mọi nơi. Tôi không biết hiệu suất giữa let và const vì vậy tôi không thể nói nếu nó tốt hơn để sử dụng const bất cứ khi nào có thể.

+0

Tại sao không phát điên và sử dụng 'const' ở khắp mọi nơi? Tôi đã tìm thấy rằng tôi rất hiếm khi thực sự cần một 'let' (chủ yếu là khi tôi xác định một giá trị trong một mệnh đề' if' hoặc 'switch'). Không có nhược điểm để sử dụng 'const' bất cứ nơi nào nó có thể và upside của nhiều thông tin về biến cho người đọc. – Perseids

-2

LET V/S CONST

Difference

  • Sự khác biệt lớn giữa chúng ta hãy và const là cố gắng để gán cho một định nghĩa trước liên tục sẽ ném ra một lỗi trong cả hai nghiêm ngặt và chế độ không nghiêm ngặt

Tương tự

  • Tương tự như vậy, lỗi được tạo ra khi nhận dạng cho một biến đã xác định trong cùng phạm vi.

Ví dụ:

var message = "Hello!"; 
let age = 25; 

// Each of these would cause an error given the previous declarations 
const message = "Goodbye!"; 
const age = 30; 
  • Hằng cũng được chặn cấp tờ khai, tương tự để cho. Điều đó có nghĩa là các hằng số bị phá hủy khi các luồng thực hiện ra khỏi khối mà chúng được khai báo và các khai báo không được treo lên đầu khối.
2

thử nghiệm Hiệu suất const vs let sử dụng trên require cho Node.js 6.10:

require('do-you-even-bench')([ 
    { name: 'test 1', fn: function() { 
    const path = require('path'); 
    } 
    }, 
    { name: 'test 2', fn: function() { 
    let path = require('path'); 
    } 
    } 
]); 

kiểm tra 1 .... 2,547,746.72 op/s
thử nghiệm 2 .... 2,570,044.33 op/s

Các vấn đề liên quan