为什么 var 语句返回值为undefined

2019-10-29  本文已影响0人  慢步独行

javascript语句运行控制器

我们在浏览器的控制台输入 abd = 2 时会打印 2,但是输入 var abd = 2 得到的结果却是 undefined,这是什么原因呢?

语句

普通语句

  1. 声明类

    var 声明语句

    const 声明语句

    let 声明语句

    函数声明语句

    class 声明语句

  2. 表达式语句,比如 abc = 3

  3. 空语句

  4. 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.

上一篇 下一篇

猜你喜欢

热点阅读