在 JavaScript 中,作用域是指变量和函数可访问的范围。它是静态的,在编写代码时就确定了。作用域具体表现形式为一段特定的代码,在该代码段中的变量和函数是封闭的、独立的,这样变量才不会泄露、污染。
JavaScript 中的每个函数都是一个对象,对象中有些属性可以访问,有些属性不可以访问,其中scope
就是其中一个。scope
指的就是作用域,其中存储了运行期上下文的集合。运行期上下文是当函数执行时,会创建的一个内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,执行上下文被销毁。
作用域链是由多个上下级关系的作用域形成的链,它的方向是从下向上(从内到外)的查找变量时就是沿着作用域链来查找。查找一个变量的查找规则为:在当前作用域下的执行上下文中查找对应的属性,如果有直接返回,否则进入下一步;在上一级作用域的执行上下文中查找对应的属性,如果有直接返回,否则进入下一步;再次执行上一步相同操作,直到全局作用域,如果还找不到就抛出找不到的异常。