ECMAScript mô tả loại nội bộ để giải thích hành vi của câu lệnh, được gọi là The Completion Specification Type.
Giá trị của các loại Hoàn là gấp ba trong những hình thức (type, value, target)
, trong đó:
type
có thể normal
, break
, continue
, return
, hoặc throw
.
value
có thể là bất kỳ giá trị ngôn ngữ nào hoặc empty
.
target
có thể là bất kỳ Identifier
hoặc empty
.
Trong trường hợp của VariableStatement
, kết thúc trở lại đã không có tác dụng quan sát được, nó là một bình thường hoàn, vì dòng chảy kiểm soát không được sửa đổi.
Báo cáo khác trả lại số hoàn thành bình thường, ví dụ: một sản phẩm nào Block
statement, các Empty Statement, các ExpressionStatement, các debugger
statement (khi không có debugger đính kèm), vv ...
Một FunctionDeclaration
(mà không phải là một tuyên bố, nhưng một SourceElement
) cũng trả về một kết thúc (normal, empty, empty)
, đó là lý do tại sao ví dụ :
eval("function f(){}"); // returns undefined
các eval
function sau khi thực thi mã, kiểm tra kết quả hoàn thành, và nếu gõ là normal
và giá trị là empty
, nó rõ ràng sản xuất undefined
(xem bước 7 của eval
), trong khi đó:
eval("(function f(){})"); // returns a function object
Có ngoặc xây dựng một PrimaryExpression
, mà là một phần của một ExpressionStatement
, và tuyên bố này trả về hoàn (normal, GetValue(exprRef), empty)
, nơi expRef
sẽ là giá trị của FunctionExpression
.
Nếu hoàn thành type
nếu khác hơn normal
còn được gọi là "hoàn thành đột ngột".
Ví dụ:
function foo() {
return 5;
}
foo();
Các return
tuyên bố bên foo
sẽ tạo ra một kết thúc giống như (return, 4, empty)
.
Giá trị target
trong bộ ba chỉ được sử dụng bởi break
và continue
, để tham khảo một định danh của một LabelledStatement
, ví dụ:
foo: while(true) {
while(true) {
break foo;
}
}
Việc hoàn thành kết quả của break
tuyên bố trên sẽ (break, empty, foo)
, vì dòng chảy kiểm soát được chuyển từ bên trong số while
thứ hai sang bên ngoài, ở cấp nhãn foo
.
Bạn có thể xem chi tiết hơn về cách loại nội này được sử dụng, trên tất cả các báo cáo khác mà thực hiện không cục bộ chuyển tầm kiểm soát như break
, continue
, return
và throw
.
Cảm ơn sự giúp đỡ của bạn – okjungsoo