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