在循环体外面定义的变量和里面定义的变量有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在循环体外面定义的变量和里面定义的变量有啥区别?相关的知识,希望对你有一定的参考价值。

Person person=null;
for(int i =0;i<100;i++)
person=map.get(i);


for(int i =0;i<100;i++)
Person person=map.get(i);

有什么不同呢?
资源节省方面有区别吗?
哪个产生的垃圾多一点

首先,变量的声明是在栈中进行的,而实例化则是在堆中,故栈中只有基础数据与实例的引用。
故上面程序的不同点:
1、在外面的定义的变量,只在栈中声明了一次。
2、在里面的定义的变量,循环多少次就在栈中声明了多少次。
3、在内存或说资源节省方面,肯定是在外面定义较好,是摧荐的写法;但是如果循环数不大,其实也者体现出来的差别也不大。
4、由于实例化的对象都在堆中,故个人认为以上两个基本一样。

以上是个人粗浅的理解,有不对的地方欢迎指出。
有问题也欢迎提问,满意请采纳!
参考技术A 因为这里的i是局部变量,它的生存周期是for下边之间,也就是说当遇到后边的是i的生存周期就结束了,它的内存也被回收了,当再次进到中的时候,原来的i已经不存在了,所以不算重复定义。
=================
还有不清楚的么?
参考技术B 循环体内定义的不能用在循环体外面追问

哦,这个我知道,那对于资源节省方面有区别吗?

js中let和var定义变量的区别

区别的话,

1:作用域不一样,var是函数作用域,而let是块作用域,也就是说,在函数内声明了var,整个函数内都是有效的,比如说在for循环内定义了一个var变量,实际上其在for循环以外也是可以访问的,而let由于是块作用域,所以如果在块作用域内(比如说for循环内)定义的变量,在其外面是不可被访问的,所以let用在for (let i; i < n; i++)是一种很推荐的写法

2. let不能在定义之前访问该变量,但是var是可以得。也就是说,let必须是先定义,再使用,而var先使用后声明也行,只不过直接使用但是没有却没有定义的时候,其值为undefined,这块要注意,这一块很容易出问题,这也是个人认为的let比var更好的地方,至于为啥会有这种区别呢,实际上var有一个变量提升7a686964616fe59b9ee7ad9431333431346462的过程。也就是说,当这个函数的作用域被创建的时候,实际上var定义的变量都会被创建,并且如果此时没有初始化的话,则默认会初始化一个undefined。

3. let不能被重新定义,但是var是可以的。这个呢,我个人认为,从规范化的角度来说,是更推荐的,比如说,你在前面声明了一个变量,后来写代码,因为忘了之前的代码逻辑,又声明了一个同名的变量,如果这俩变量逻辑不一样,并且后面都要用的话,很容易出问题,且不容易维护。

总之呢,let从规范化的角度来说,要比var要进步了很大一步。所以一般情况下的话,推荐用let,const这些。

请戳:百度知道

http://www.lht.ren/article/15/

http://www.lht.ren/article/16/

以上是关于在循环体外面定义的变量和里面定义的变量有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

js中let和var定义变量的区别

C语言面试考点之二

C语言面试考点之二

python的函数里面定义的变量在函数外面怎么用?

请教高手,C语言中,把变量定义在主函数之外和定义在主函数之内有啥区别?

c语言中,声明和定义有啥区别