美文网首页
JS作用域

JS作用域

作者: 綪比纸薄 | 来源:发表于2020-03-31 14:52 被阅读0次

    作用域: 程序语言设定的一些规则, 哪些地方可以读取变量,哪些地方可以修改变量 这个规则叫做作用域

    JS的作用域有: 全局作用域, 函数作用域, 块级作用域, 动态作用域

    1. 全局作用域
      在程序的任何地方都能拿到的变量, 这个变量就是全局变量, 他拥有的作用域就是全局作用域
      JS在函数外部定义的变量基本上都是全局变量
      在函数内部或者代码块中没有定义的变量, 也是具备全局作用域的变量
        var ABC= 123
        DEF = 456
        function test() {
          GHI = 789
        }
        test()
      
      上面的两个变量都是可以在程序的任何地方获取到
        console.log(ABC) // 123
        console.log(DEF) // 456
        console.log(GHI) // 789
      
      var定义的变量叫做全局变量, 未定义的变量严格意义上不能成为全局变量而是window的属性
      Js的全局变量: 使用var声明的变量, 全局变量是不可删除的, 对象的属性是可以被删除的
          delete ABC // false
          delete DEF // true
      
    2. 函数作用域(局部作用域)
      在函数内部声明的变量就是局部变量, 只有在这个函数内才能够获取到
          function test () {
            var a = 3
            return a + 4
          }
          console.log(test()) // 7
          console.log(a)  // a is not defined
      
    3. 块级作用域
      在ES6之前是没有块级作用域的
      function test () {
        var a = 3
         if (a === 3) {
            var b = 4
          }
          console.log(b) // 4 能够访问到if里面定义的变量
      }
      
      在ES6中只要在一个{}里面的代码就是一个块这个块里面的作用域的变量不能再使用var 来定义了
    4. 动态作用域
      绑定this的指向
      var a = {
        b: function(){
          var fnc = function(){
              console.log(this.c)
          }
          fnc();
        },
        c: '123'
      }
      a.b() // undefined
      
      var a = {
        b: function(){
          var fnc = function(){
              console.log(this.c)
          }.bind(this)
          fnc();
        },
        c: '123'
      }
      a.b() // 123
      

    相关文章

      网友评论

          本文标题:JS作用域

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