作用域链是什么?
如果要解释作用域链得先知道什么是作用域?什么是闭包?
什么是作用域
用域是一个函数在执行时期的执行环境
每一个函数在执行的时候都有着其特有的执行环境,ECMAScript标准规定,在javascript中只有函数才拥有作用域。换句话,也就是说,JS中不存在块级作用域。
什么是闭包
闭包的概念:有权访问另一个作用域的函数。
这句话就告诉我们,第一,闭包是一个函数。第二,闭包是一个能够访问另一个函数作用域。
function A(){
var a=1;
function B(){ //闭包函数,函数b能够访问函数a的作用域。所
以,像类似这么样的函数,我们就称为闭包
}
}
作用域链?
当我们使用闭包形成多个嵌套作用域的情况时最内层使用最外层的变量,因为内层没有声明所以会向上一层找一直找到为止,这个过程叫作用域链。
var x = 111;
function fn1(){
var a = 1;
return function fn2(){
var b = 2;
function fn3(){
console.log(x)
}
fn3()
}
}
const xxx = fn1();
xxx();// 结果是 111 这个 过程就是作用域链