JS全局、局部变量详解

导读

一、 释疑局部、全局变量

全局变量:常常定义在函数外部,拥有全局作用域,即在 JavaScript 代码的任何地方都可以访问。

局部变量:定义在函数内部,只能在函数中使用的变量,作用范围是从函数头到尾,即在{}里。

注意:在函数内声明的变量只在函数体内有定义,即为局部变量,其作用域是局部性的。需要注意的是,在函数体内声明局部变量时,如果不使用 var 关键字,则将声明全局变量。

<!-- 局部变量及全局变量 -->
    <script>
        var num = 33;//这是一个全局变量
        function sum(){
    
    
            var num1 = 6;//局部变量
            num2 = 7;//未使用var关键字,该变量为全局变量
            return num1 +num2;
        }
    </script>

二、声明变量的几种方式

1、局部变量的声明

简要概括:中括号内{ },局部变量用Var
<script>
// 局部变量的声明
        function add(){
    
    
            var men = 6;//这是局部变量哦
        }
 </script>

2、全局变量的三中声明方式

①显示声明(使用var + 变量名)

②隐式声明(变量名=变量值)

③使用window全局声明

①代码

<script>
	var num = 66;//使用var
</script>

②代码

<script>
	 var num =11;//显示声明

        function db(){
    
    
            var a = 1;//局部变量
            b = 66;//全局变量并且是隐式声明
        }
</script>

①代码

<script>
	 //使用window来声明
         window.c = 99;
</script>

三、局部变量与全局变量三大问题

①相同变量名问题

思考:当用户在函数外声明了一个名为num的全局变量时,同时在名为aa的函数内部声明了一个num的局部变量时,各自的作用域是什么样的呢?

//同名问题
         var num =7;//全局变量
         function aa(){
    
    
             var num = 9;//局部变量
             console.log(num)//结果为:9 
         }
         aa();//调用函数才能控制台输出结果
         console.log(num);//结果为:7

讲解: 名为num的变量,在函数部使用num变量时,范围大于去全局变量的范围;在函数,则是全局变量范围大

②:变量零散问题

思考

<script>
	var a = 9;//全局变量
	function aa(){
    
    
	console.log(a);//思考点:结果为undefined 为啥?
	var a = 8;//局部变量
	console.log(a);//结果为8 局部变量
	}
	console.log(a);//结果为9 全局变量
</script>

解读
第一个console.log(a)输出语句值为undefined,是因为变量在使用之前系统默认在函数体内声明了变量a,但是没有给定值,所以结果为undefined。

<script>
   var a = 9;//全局变量
   function aa(){
    
    
    var  a;//注意看这里,系统默认声明
   console.log(a);//思考点:结果为undefined 为啥?
   var a = 8;//局部变量
   console.log(a);//结果为8 局部变量
   }
   console.log(a);//结果为9 全局变量
</script>

③变量释放问题

<script>
		var a = "hello"; //全局变量
		window.b = "word"; //全局变量
		delete a;
		delete b;
		console.log(typeof a); //结果:string
		console.log(typeof b); //结果:undefined
		! function b() {
    
    
			var c = 1; //局部变量
			d = 2; //全局变量
			delete c;
			delete d;
			console.log(typeof c); //结果:number
			console.log(typeof d); //结果:undefined
		}()
</script>

解读:
①:使用 var 创建的变量不能使用 delete 释放内存。
②:var 创建的变量可以使用 delete 释放内存。

特别声明:本文附加自己理解和原作者的思想,如有侵权,联系可删。
原文链接:https://blog.csdn.net/qq_23853743/article/details/106946100

猜你喜欢

转载自blog.csdn.net/qq_45835014/article/details/115406983
今日推荐