|
|
@ -84,4 +84,11 @@ this 的值存放在私有属性 \[\[ThisBindingStatus\]\] 中 |
|
|
|
Completion Record 是语言实现者才需要关心的内容,但是我们可以从中看出一些 JavaScript 更加底层的实现逻辑,它有着三个字段分别是: |
|
|
|
Completion Record 是语言实现者才需要关心的内容,但是我们可以从中看出一些 JavaScript 更加底层的实现逻辑,它有着三个字段分别是: |
|
|
|
- \[\[type\]\] - 表示完成的类型,有 break continue return throw 和 normal 几种类型 |
|
|
|
- \[\[type\]\] - 表示完成的类型,有 break continue return throw 和 normal 几种类型 |
|
|
|
- \[\[value\]\] - 表示语句的返回值,如果语句没有,则是 empty |
|
|
|
- \[\[value\]\] - 表示语句的返回值,如果语句没有,则是 empty |
|
|
|
- \[\[target\]\] - 表示语句的目标,通常是一个 JavaScript biao'qi'a |
|
|
|
- \[\[target\]\] - 表示语句的目标,通常是一个 JavaScript 标签 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
JavaScript 正是依靠语句的 Completion Record 类型,方才可以在语句的复杂嵌套结构中,实现各种控制,普通语句执行后,会得到 \[\[type\]\] 为 normal 的 Completion Record,JavaScript 引擎遇到这样的 Completion Record,会继续执行下一条语句。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这些语句中,只有表达式语句会产生 \[\[value\]\],当然,从引擎控制的角度,这个 value 并没有什么用处,Chrome 控制台显示的正是语句的 Completion Record 的 \[\[value\]\] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参考文章: |
|
|
|
|
|
|
|
- http://www.ecma-international.org/ecma-262/#sec-ecmascript-specification-types |