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

作用域和作用域链

作者: 独角仙没有角 | 来源:发表于2019-06-27 18:39 被阅读0次

    "JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。" ——《JavaScript权威指南》

    var name = 'Schopenhauer'
    // getName 封闭的作用域
    function getName () {
      console.log(name)
    }
    // myName 封闭的作用域
    function myName () {
      var name = 'wangxi'
      getName()
    }
    
    myName() // Schopenhauer
    

    JavaScript 中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里

    执行 myName,函数内部执行了 getName,而 getName 是在全局环境下定义的,因此尽管在 myName 中定义了变量 name,对getName 的执行并无影响,getName 中打印的依然是全局作用域下的 name。

    调用函数getName是在其先定义好的作用域中解析运行,因为在getName函数作用域中没有找到name变量,因此到外部全局作用域中搜索变量name,因此是Schopenhauer,而不是在myName去寻找的,严格意义上讲,所以有的函数都是闭包,具备独立的执行环境和作用域链,通过闭包实现,实现跨作用域访问变量(外部访问内部)
    思考题目

    var name = 'Schopenhauer'
    
    function getName () {
      var name = 'Aristotle'
       var intro = function() {  // 这是一个闭包
          console.log('I am ' + name)
       }
       return intro
    }
    
    function showMyName () {
       var name = 'wangxi'
       var myName = getName()
       myName()
    }
    
    showMyName()
    

    相关文章

      网友评论

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

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