JavaScript基础--作用域

一、作用域:

1、全局作用域:在script标签中的代码,或者外边js文件中的代码(非函数体)

全局变量:在全局作用域内定义的变量,在任何的作用域内都是有效的
生命周期:浏览器打开的时候开始,浏览器关闭的时候销毁
全局变量都是window对象下的属性,全局函数都是window对象下的方法

2、局部作用域:有且只有函数才能产生局部作用域!

局部变量:只在当前的局部作用域内有效
生命周期:函数调用时开始,调用完成后销毁

二、隐式全局变量

1、在局部作用域内没有用var声明的变量
2、在局部作用域内没有用var声明的变量以分号分隔
3、在局部作用域内没有用var声明的变量以赋值号连接

三、作用域链的查找规则:

先从当前的作用域内查找,如果有就返回,如果没有依次向上一级作用域内查找,直到全局作用域;如果全局作用域内还没有,就报错。

    var num = 100
    console.log(num) //100
    if (1) {
      console.log(num) //100
    }
    while (num > 99) {
      console.log(num) //100
      num--
    }
    var demo1 = function () {
      console.log(num) //99
      console.log('我是demo1')
    }
    demo1()
    // 浏览器对象
    console.log(window)
    console.log(num) //99
    console.log(window.num) //99
    var str = 'javaSE'
    console.log(window.str) //javaSE
    window.demo1()
    function demo2() {
      var count_1 = 5
      console.log(count_1) //5
      console.log('我是demo2') //我是demo2
    }
    demo2()
    console.log(count_1) //报错
    function fn1() {
      a = 1
      var x = 10;y = 20;z = 30
      var m = n = o = 22
    }
    fn1()
    console.log(a) //1
    console.log(y, z) //20 30
    console.log(n, o) //22 22
    // var age = 55
    function funct_1() {
      // var age = 66
      function funct_2() {
        // var age = 77
        function funct_3() {
          // var age = 88
          console.log(age) //88 77 66 55 报错
        }
        funct_3()
      }
      funct_2()
    }
    funct_1()

你可能感兴趣的:(javascript,前端,开发语言)