当前日期:2020年11月24日 星期二
Hi 你好,欢迎访问!登录
搜索 导航

豆芽笔记-电商运营、电商基础知识的独立个人博客!

当前位置:首页 - 学习进阶 - WEB前端 - 正文
阅读模式

JS中局部变量全局变量作用域的理解

2018-08-05 | WEB前端 | 欧阳七仔 | 2895°c

最近也一直受js中的变量的作用域的困扰,特别是循环内嵌函数,函数内嵌循环,这两种组合方式下的变量值的异同,作为初学者,捋都捋不清。这两者之间的代码极为相似,李逵李鬼……

索性今天就来整盘捋一捋,自己的理解,加上代码测试,肯定有不准确的地方,先做个记录,随着经验和js知识的更多的积累,再回来批阅下自己当下的这篇博文。博客的意义不就在于此么?

分几种情况做简单记录分析:

一、全局变量、局部变量的优先级问题变量同名冲突的情况下)

答:局部变量优先级更高!

		var num=1;
		function abc(){
			var num=3;
			console.log(num);
		}
		abc();

打印值为:3;

二、函数内部声明变量,漏写var声明,是什么变量?

答:全局变量;

		function abc(){
			num=1;
			alert(num);
		}
		abc();
		console.log(num);

无论是函数体内部弹出值,还是函数体外部打印值均为1;

三、变量(全局变量/局部变量)声明和调用的顺序要求;

答:

1、全局变量一定要在调用前声明,否则出现not defined报错;(如例)

		function fun(){
			console.log(num);
			num=5;
			console.log(num);
		}
		fun();

函数报错:Uncaught ReferenceError: num is not defined

变量声明调用前后关系00.png

2、函数体内声明的局部变量,在函数体内都是可见的;在函数体内,局部变量在声明前就可以调用了;

		function fun(){
			console.log(num);
			var num=5;
			console.log(num);
		}
		fun();

不会报错,出现undefined

变量声明调用前后关系01.png

四、for循环内的循环变量是什么变量?(全局?局部?)

1、函数内嵌于循环;

答:for循环内含函数体的情况:如下例,for循环体内的循环变量i,跟全局变量性质类似,存储内存引用,直到内存释放。而函数体function abc(){}并不是立即执行,循环结束后,执行函数,所以打印的值是5(内存引用存储的最终值);

		for(var i=0; i<5; i++){
			function abc(){
				console.log(i);
			}
		}
		console.log(i);
		abc();

2、循环包含在函数中;

答:函数内包含for循环的情况:函数立即执行,打印的值则是循环的每一个值!

		function a(){
			for(var d=0; d<5; d++){
				console.log(d);
			}
		}
		a();

3、let声明  let声明的循环变量,仅在循环体内有效,出循环体存储则释放,调用则会出现not defined的报错;

		var a=[];
		for(let i=0; i<5; i++){
			function ab(){
				a[i]=i;
				console.log(a[i]);
			}
		}
		ab();
		console.log(i);	

let.png

……

---2018.08.05

版权声明

凡注明为豆芽笔记原创文章,转载请注明出处,谢谢合作!如果文章中图片、文字侵犯到您的权益,请留言联系博主进行处理或者删除!

分享:
如果您觉得这篇文章对您有帮助,请分享到朋友圈或者添加到收藏夹哦!
QR:  JS中局部变量全局变量作用域的理解

扫一扫,用手机打开吧

TAGS:未定义标签

共1条评论

鸽子  2018-08-05 21:14:47 @Ta

向大佬低头

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

用户登录×
用户名:
密    码: