文章目录加载中

Javascript进阶-作用域和执行上下文

# 作用域和作用域链

题目:如何理解 JS 的作用域和作用域链。

① 作用域

ES5 有”全局作用域“和”函数作用域“。ES6 的letconst使得 JS 用了”块级作用域“。

为了解决 ES5 的全局冲突,一般都是闭包编写:(function(){ ... })()。将变量封装到函数作用域。

② 作用域链

当前作用域没有找到定义,继续向父级作用域寻找,直至全局作用域。这种层级关系,就是作用域链

# 执行上下文

题目:解释下“全局执行上下文“和“函数执行上下文”。

全局执行上下文

解析 JS 时候,创建一个 全局执行上下文 环境。把代码中即将执行的(内部函数的不算,因为你不知道函数何时执行)变量、函数声明都拿出来。未赋值的变量就是**undefined**。

下面这段代码输出:undefined;而不是抛出Error。因为在解析 JS 的时候,变量 a 已经存入了全局执行上下文中了。

console.log(a);
var a = 1;

函数执行上下文

和全局执行上下文差不多,但是多了thisarguments和参数。

在 JS 中,this是关键字,它作为内置变量,其值是在执行的时候确定(不是定义的时候确定)

本文来自心谭博客:xin-tan.com,经常更新web和算法的文章笔记,前往github查看目录归纳:github.com/dongyuanxin/blog