美文网首页
Javascript作用域和作用域链

Javascript作用域和作用域链

作者: 豆包815 | 来源:发表于2020-04-17 17:14 被阅读0次

    作用域

    你知道吗?在JavaScript中,用var申明的变量实际上是有作用域的。作用域分为全局作用域和局部作用域。

    如果在一个函数体内部声明了一个变量,那么这个变量的作用域则为整个函数体,函数体外部是不能调用这个变量的,这是局部变量
    function foo(){
      var x=1
      x=x+1
    }
    x=x+2
    console.log(x)  //Uncaught ReferenceError: 在函数体外是无法引用内部声明的变量的
    
    

    因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量,他们之间互不影响。
    局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。

    不在任何函数体内声明的对象,即为全局变量。
     var x=1
    function foo(){
     x=x+1
    }
    x=x+2
    console.log(x)  //3 函数体内可以调用全局变量
    
    
    在对作用域有一定的了解以后,我们在了解下作用域链

    作用域链

    一般变量取值会在创建这个变量的函数体内取值
    如果在当前函数体内没有取到值,那么就去这个函数体的上一级去寻找,直到找到最外层的全局作用域,整个查找的过程就是作用域链

    var a = 1
    function fn1(){
      function fn2(){
        console.log(a)
      }
      function fn3(){
        var a = 4
        fn2()
      }
      var a = 2
      return fn3
    }
    var fn = fn1()
    fn() //输出多少
    

    如果还不明白请看看这个https://www.cnblogs.com/gaosirs/p/10579059.html,应该就会明白了

    相关文章

      网友评论

          本文标题:Javascript作用域和作用域链

          本文链接:https://www.haomeiwen.com/subject/fcfdmhtx.html