JavaScript函数作用域和变量

放肆的年华 提交于 2020-03-01 07:52:33

作用域

定义:一个变量可以生效的范围
变量不是在所有的地方都可以使用,而这个变量的使用范围就是作用域

  • 函数作用域
    JS划分作用域是用大括号划分的

    • 局部作用域
      在JS中只有函数能生成一个局部作用域,别的都不行
      每一个函数都是一个作用域

      变量在函数内声明,变量为局部变量

      //在函数大括号之中声明的变量,我们称之为局部变量
      function foo(){
          var a = 10;//在大括号之中声明的变量只能在这个大括号之中使用
          console.log(a);
      }
      foo();           //运行结果: 10
      console.log(a); //运行结果: ReferenceError: a is not defined 表示引用错误,a未被定义
      
    1. 因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
    2. 局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁
    • 全局作用域
      全局作用域是最大的作用域
      生命周期是和程序同步的,程序不关闭,作用域一直存在

      变量在函数外定义,即为全局变量。

      	var a = 1;
      	//变量声明没有被大括号包裹,我们称之为全局变量
      	//这个变量在任何地方都可以访问
      	console.log(a);   //运行结果: 1
      	function foo(){
      	    console.log(a);
      	}
      	foo();   //运行结果: 1
      
      1. 在全局作用域中定义的变量可以在任何地方使用

      2. 全局变量的命名空间是唯一的

        如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

        function foo() {
        	    a = 10;   //没有使用var关键字声明的变量
            	console.log(a);
        }
        foo();              //运行结果:  10
        console.log(a);     //运行结果: 10
        

        所有 window 对象的属性拥有全局作用域

        ​ 一般情况下,window 对象的内置属性都拥有全局作用域,例如 window.name、window.location、window.top 等等。

    由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:

    function foo() {
        var x = 1;
        function poo() {
            var y = x + 1; // poo可以访问foo的变量x!
        }
        var z = y + 1; //  foo不可以访问bar的变量y!
    }
    
    • 全局变量和局部变量的区别

       1.生命周期
       	全局变量:生命周期是和程序同步的;程序不关闭,变量一直存在
        	局部变量:生命周期是和函数执行同步的,函数执行结束变量就被删除了
       2.命名空间
       全局之中的命名空间是唯一的
       局部命名空间一个作用域一个
      
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!