ECMAScript类型语言类型包括:字符串、布尔值、null等。规范类型,描述语言类型。Reference类型解释了delete、typeof以及赋值等操作。获取Reference组成部分方法:GetBase, IsPropertyReference等。Reference构成包括:base value(属性所在对象)、referenced name(属性名称)和strict reference(默认false)。MemberExpression描述如何确定this的值。闭包定义为能够访问自由变量的函数。自由变量是指函数中可用但不属于函数参数或局部变量的变量。在函数foo中访问变量a,a既不是foo的局部变量也不是参数,故为自由变量。在ECMAScript中,闭包指函数与函数内可访问的非自身变量的结合。分析代码,理解执行上下文栈与执行上下文变化。思考f函数执行时,checkscope函数上下文已销毁,如何访问checkscope作用域下的scope值?f执行上下文维护作用域链。AO(活动对象)和VO(变量对象)构成作用域链。由于作用域链,f函数仍能读取checkscopeContext.AO的值,说明即使checkscopeContext销毁,JavaScript仍会保留checkscopeContext.AO在内存中,使f函数通过作用域链访问它,实现闭包概念。传递参数原理:函数传递参数,实际传递的是参数的拷贝。ECMAScript中所有函数参数按值传递。现在JS分为两部分:基本类型按值传递,引用类型按共享传递。按值传递:复制函数外部的值给函数内部参数,不影响原值,传递的是值。共享传递:传递对象时影响原值,传递的是地址索引。手写call定义:在指定this值和参数值下调用函数或方法。手写apply定义:与call类似,但入参为数组。