2016-06-20 16 views

Trả lời

207

Hãy là một tuyên bố rằng toán học đã được thông qua bởi ngôn ngữ lập trình đầu như Đề án và cơ bản. Các biến được coi là các thực thể cấp thấp không phù hợp với mức trừu tượng cao hơn, do đó, mong muốn của nhiều nhà thiết kế ngôn ngữ giới thiệu các khái niệm tương tự nhưng mạnh hơn như Clojure, F #, Scala, trong đó let có thể có nghĩa là giá trị hoặc biến số . được chỉ định, nhưng không thay đổi, điều này cho phép trình biên dịch bắt được nhiều lỗi lập trình hơn và tối ưu hóa mã tốt hơn. JavaScript đã có var ngay từ đầu, vì vậy, họ chỉ cần một từ khóa khác và chỉ mượn từ hàng tá ngôn ngữ khác sử dụng let làm từ khóa truyền thống càng gần var càng tốt, mặc dù trong JavaScript let tạo biến cục bộ phạm vi khối thay thế.

+3

cũng được giải thích. – gani

+25

Và trang Tài liệu Mozilla chính thức trích dẫn trang này cho câu hỏi này https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let – SarathChandra

+2

Nó cũng hay mà 'len ('var') == = len ('let') ', có nghĩa là các khai báo của bạn xếp hàng độc đáo trong trình soạn thảo của bạn theo một trong hai cách.Tôi đã không tìm thấy bất cứ điều gì được nêu ra để đề nghị này là cố ý, nhưng nó có thể là một) trực quan dễ chịu và dễ đọc hơn, hoặc b) khủng khiếp gây phiền nhiễu để gỡ lỗi nếu bạn trộn hai (mà có vẻ như một ý tưởng tồi anyways, nhưng tôi ' đã thấy nó được thực hiện). – brichins

49

Tôi đoán nó theo truyền thống toán học. Trong toán học, người ta thường nói "hãy x là số thực bất kỳ" hoặc như thế.

29

Nó thực hiện chính xác những gì mà var thực hiện với chênh lệch phạm vi. Bây giờ nó không thể lấy tên var vì nó đã được lấy.

Vì vậy, có vẻ như nó đã lấy tên tốt nhất tiếp theo có ngữ nghĩa trong cấu trúc ngôn ngữ tiếng Anh thú vị.

let myPet = 'dog'; 

Trong tiếng Anh nó nói "Hãy để con vật cưng của tôi là một con chó"

+3

Mặc dù nguồn gốc cho phép có thể là ngôn ngữ và toán học, nhưng tham chiếu gần nhà chắc chắn là câu lệnh LET trong tất cả các phiên bản của ngôn ngữ lập trình BASIC, một trong nhiều tác giả của ES6 đã bắt đầu học hơn 40 yo. –

+3

@wide_eyed_pupil Chỉ FYI: là một người trên 40 tuổi (mặc dù không phải là tác giả của ES6) lớn lên trên BASIC, không có cộng đồng nào tôi tham gia với LET được sử dụng trong thực tiễn chung; chúng ta vừa gán các biến, như Python hiện nay (ví dụ 'A $ =" HELLO WORLD "') Các thông dịch viên bao gồm Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 trên CP/M, Applesoft BASIC, và thậm chí BASCOM, MS BASIC trình biên dịch trên CP/M. VAX BASIC đã có LET, nhưng không yêu cầu nó, như tôi nhớ lại. Bộ nhớ đã được chặt chẽ trở lại sau đó, và 3 hoặc 4 nhân vật phụ của văn bản chương trình cho mỗi tuyên bố đã tạo sự khác biệt, đặc biệt là trong các chương trình "lớn". –

+0

@ PeterHull Thật thú vị, tôi đã viết mã hóa đầu tiên trên các thẻ được đánh dấu bằng bút chì gắn với CPU kỹ thuật số, sau đó là các khung hình chính tại phòng thí nghiệm nghiên cứu của ông già và một PDP8 kỹ thuật số ở trường. không bao giờ một lần thấy người ta sử dụng LET mà không thực sự sử dụng câu lệnh, không phải trong những cuốn sách tôi đọc. Tâm trí bạn tôi được khuyến khích để mã trong FORTRAN và PASCAL ngay sau khi tôi có bất kỳ tốt, cơ bản là xấu như nó được, thậm chí không có GOSUB (tức là chức năng tái sử dụng) trong các phiên bản tôi sử dụng. –

8

Khả năng rất có thể là đó là lựa chọn thành ngữ nhất. Không chỉ dễ nói mà còn trực quan để hiểu. Một số có thể tranh luận, thậm chí nhiều hơn so với var.

Nhưng tôi cho rằng có một chút lịch sử nữa.

Từ wikipedia:

ngôn ngữ LCF Dana Scott là một giai đoạn trong sự phát triển của phép tính lambda sang ngôn ngữ chức năng hiện đại. Ngôn ngữ này đã giới thiệu biểu thức let, đã xuất hiện trong hầu hết các ngôn ngữ chức năng kể từ thời điểm đó.

Các ngôn ngữ bắt buộc đầy đủ của tiểu bang như ALGOL và Pascal thực chất là triển khai biểu thức let, để triển khai phạm vi chức năng bị giới hạn, trong cấu trúc khối.

Tôi cũng muốn tin rằng đây cũng là một nguồn cảm hứng, cho số let trong Javascript.

26

Thêm vào exebook's response, việc sử dụng toán học của từ khóa hãy cũng đóng gói cũng ý nghĩa Phạm vi của let khi được sử dụng trong Javascript/ES6.Cụ thể, cũng giống như mã ES6 sau bỏ qua sự phân công trong niềng răng của toPrint và in ra giá trị của 'Hello World':

let toPrint = 'Hello World.'; 
{ 
    let toPrint = 'Goodbye World.'; 
} 
console.log(toPrint); // Prints 'Hello World' 

hãy như được sử dụng trong toán học chính thức (đặc biệt là các văn bản chứng minh) chỉ ra rằng trường hợp hiện tại của một biến tồn tại chỉ cho phạm vi của ý tưởng logic đó. Trong ví dụ sau, x ngay lập tức nhận được một nhận dạng mới khi nhập ý tưởng mới (thường là những khái niệm cần thiết để chứng minh ý tưởng chính) và chuyển đổi ngay lập tức thành x cũ khi kết thúc bằng chứng phụ. Tất nhiên, cũng giống như trong mã hóa, điều này được coi là hơi khó hiểu và do đó thường tránh được bằng cách chọn một tên khác cho biến khác.

Cho x là như vậy và như vậy ...

  thứ Proof

  Idea mới {Cho x là cái gì khác ... chứng minh một cái gì đó} Kết luận New Idea

  Chứng minh ý tưởng chính với cũ x

+4

Tôi nghĩ điều này thực sự hữu ích. Câu trả lời được chấp nhận gần như là một chút gây hiểu lầm, vì nó nói về giá trị không thể thay đổi được, đó không phải là điều mà 'let' là gì cả. 'let' là tất cả về phạm vi. – jinglesthula

0

Hãy sử dụng phạm vi giới hạn mức chặn ngay lập tức trong khi var là phạm vi chức năng hoặc phạm vi toàn cầu thường.

Dường như cho phép được chọn nhiều khả năng nhất vì nó được tìm thấy trong rất nhiều ngôn ngữ khác để xác định các biến, chẳng hạn như BASIC và nhiều biến khác.

1

Các biến được khai báo bằng cách cho là phạm vi của chúng mà khối mà chúng được xác định, cũng như trong bất kỳ khối con nào có chứa. Bằng cách này, hãy làm việc rất giống với var. Sự khác biệt chính là phạm vi của biến var là toàn bộ hàm bao. Xem một số ví dụ bên dưới.

function varTest() { 
    var x = 1; 
    if (true) { 
    var x = 2; // same variable! 
    console.log(x); // 2 
    } 
    console.log(x); // 2 
} 

function letTest() { 
    let x = 1; 
    if (true) { 
    let x = 2; // different variable 
    console.log(x); // 2 
    } 
    console.log(x); // 1 
} 
Các vấn đề liên quan