作用域指运行代码时,代码区块中变量,函数和对象的可访问性。
全局作用域
在代码中任何地方都能访问到的对象拥有全局作用域。
函数作用域
函数作用域指声明在函数内部的变量。
块级作用域
块级作用域可通过let和const声明,所声明的变量在指定块的作用域外无法被访问,在一个函数内部或一个代码块内部被创建。
let和const的特点:
- 变量提升不会提升到代码块的顶部,所以需要手动放置到顶部。
- 禁止重复声明。
作用域链是什么
自由变量指当前作用域中没有定义的变量。
作用域链指由子作用域层层向父作用域中找自用变量的关系。
作用域和执行上下文的区别
javascript属于解释性语言,js的执行分为两个阶段:解释阶段和执行阶段。作用域在解释阶段,在函数定义时已经确定,但是执行上下文在函数执行之前才被创建。
执行上下文可能随时会变,但时作用域在定义时就被确定,不会变。同一个作用域下,不同的调用会产生不同的执行上下文。