2013-12-12 11 views
5

Gần đây, tôi đọc Đặc tả ngôn ngữ ECMAScript. Tôi đã không có kế hoạch để đọc toàn bộ đặc điểm kỹ thuật, tôi chỉ nhặt một số phần. Tôi đến qua nhiều câu hỏi, một trong số họ là như thế này:ECMA-262 ReturnIfAbrupt

ToLength

1.Let len be ToInteger(argument). 
2.ReturnIfAbrupt(len). 
3.If len ≤ +0, then return +0. 
4.Return min(len, 2^53-1). 

Theo tôi được biết, nó phải là như thế này:

var len = ToInteger(argument); // step 1 
len = ReturnIfAbrupt(len);// step 2 
// step 3 
if(len<=0){ 
    return +0; //-0 is OK too? 
} 
return Math.min(len, Math.pow(2,53)-1); // step 4 

Tôi không hiểu những gì ý nghĩa của ReturnIfAbrupt (len) là, và tôi thấy điều này:

ReturnIfAbrupt

1.Nếu đối số là abrupt completion, sau đó trả về đối số.

2.Ese nếu đối số là Completion Record, sau đó để đối số là đối số. [[Value]].

Hoàn thành đột ngột là gì, và sự khác biệt giữa nó và hồ sơ hoàn thành? Họ có thể kết hợp một bước: Nếu đối số là Completion Record, sau đó trả về đối số. Bất kỳ đề xuất nào sẽ được biết ơn!

+0

Bạn có thể bắt đầu đọc đặc điểm kỹ thuật ES 5.1, không còn phát triển nữa. – Bergi

+0

Bản sao có thể có của [ReturnIfAbrupt có nghĩa là gì trong bản dự thảo ES6?] (Http://stackoverflow.com/questions/12995554/what-does-returnifabrupt-mean-in-es6-draft) –

Trả lời

1

Hiểu biết của tôi là trong ES 6, khi biểu thức được đánh giá, nó trả về bản ghi hoàn thành (là thiết bị đặc tả để giải thích hành vi) chứa thông tin về kết quả đánh giá biểu thức.

Trong trường hợp trên, nếu đối số là bản ghi hoàn thành đột ngột (nghĩa là loại của nó là bất kỳ thứ gì khác ngoài bình thường), thì nó sẽ được trả lại.

Nếu đối số không phải là bản ghi hoàn thành đột ngột, giá trị của nó sẽ được trả lại.

Về cơ bản, điều đó có nghĩa là nếu việc chuyển đổi đối số thành số nguyên đã OK, hãy trả về giá trị. Nếu không, sẽ chuyển một giá trị lỗi.

1

Theo thông số ECMAScript.

Thuật ngữ "hoàn thành đột ngột" đề cập đến bất kỳ việc hoàn thành nào có giá trị [[type]] khác với giá trị bình thường.

Bản ghi hoàn thành là "đối tượng" với ba thành viên dữ liệu: loại, giá trị và mục tiêu.

http://people.mozilla.org/~jorendorff/es6-draft.html#sec-normalcompletion là ví dụ về Hồ sơ hoàn thành.

Tuy nhiên, nó không rõ ràng đủXD, có thể bạn cần đọc thêm về đọc.