JavaScript的大山:闭包和作用域链
执行上下文 所谓的程序其实可以理解为对变量的读写操作,因此便会产生一个问题:变量从哪来?执行上下文可分为两种:全局执行上下文和函数执行上下文。 从广义上来说,执行上下文由Lexical Environment和This binding构成。 Lexical Environment翻译成中文即词汇环境,而This Binding则指的是当前执行上下文中的this指向 全局执行上下文 这是一个最基础的上下文环境,其组成部分包含:全局对象(在浏览器中即Window对象)、全局Scope和outer。 在该作用域中,outer为null。因为他是为后边函数执行上下文所服务的。 浏览器中,全局执行上下文中的this指向Window对象。 构建执行上下文 执行上下文的创建是在,代码执行之前完成创建的。例如: 处理声明 检查重复定义 scope中如果存在重复声明,则抛出错误。但全局对象中可以重复。 创建绑定 对变量进行初始赋值。 var声明会将变量初始值赋值为undefined 函数声明会创建函数对象,然后将变量指向该对象 函数对象是一个很特殊的对象: 有一个特殊的p ...