javascript语句运行控制器
我们在浏览器的控制台输入 abd = 2
时会打印 2
,但是输入 var abd = 2
得到的结果却是 undefined
,这是什么原因呢?
语句
普通语句
-
声明类
var 声明语句
const 声明语句
let 声明语句
函数声明语句
class 声明语句
-
表达式语句,比如 abc = 3
-
空语句
-
debugger语句
语句块
js中带有括号的都是一个语句块,包含小括号和大括号
Completion Record
一般编程语言都有一个规律:用一定的文法和词法,表达一定的语义,去操作运行时
Completion Record就是js运行时的一种基础类型,它表示语句的执行结果,它有三个属性:
1、[ [ type ] ] : 表示完成类型,有break、continue、return、throw和normal几种
2、[ [ value ] ] : 表示返回的值,如果语句没有返回值,那就为empty
3、[ [ target ] ] : 表示语句的目标值,及语句前面加的标签
不同的语句在执行的过程中,completion值不同,而它的值决定了语句的执行逻辑
普通语句执行后会得到 [[type]]值为normal的 Completion Record,所以普通语句执行完成之后就继续执行下一条
而只有表示式语句才会有 [[value]]值,不过这个[[value]]对于引擎执行逻辑来说没有什么用处
结合上面两点,也就不难解释,var语句的返回值为什么是undefined:
var语句执行得到的是一个[[vaue]]值为空的Completion Record.
网友评论