作用域链复习小笔记

  • 作用域链
红宝书 中对作用域链是这么描述: 当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问; 通俗点说就是作用域是针对变量的。(标识符) 比如我们创建一个函数,此函数包含另一个函数,函数里面还包含变量,此时就有三层作用域【全局作用域——第一个函数作用域——第二个函数作用域】

栗子:

var name ="一个栗子"
function fun(){
    console.log(name) //undefined
    var name = "fun内的一个栗子"
    console.log(name) // fun内的一个栗子
    function fun1(){
        var name = "fun1内的一个栗子"
        console.log(name) //fun1内的一个栗子
    }
    fun1()
}
fun() // 最终输出undefined——fun内的一个栗子——fun1内的一个栗子
在执行fun时会去找name变量,且fun函数内有申明name但输出是在申明赋值之前,所有输出是未定义————undefined;而fun函数里面的第二个输出自然是定义赋值之后所以输出————fun内的一个栗子;fun1里面的输出是在此函数里面定义name之后输出的,固然值就是————fun1内的一个栗子,而不会往上查找name变量

在打印输出某个变量值的时候一直会找到全局变量name这个查找的过程就叫作用域链,也就是会从当前层一层一层往上找一直找到全局name为止

你可能感兴趣的:(javascript)