作用范围不一样,变量的作用范围仅仅限定在声明该变量的{}内。所以,如果变量声明在for循环外面,其作用范围就是整个main函数,如果声明在第一层for循环内,作用范围就限定在for循环中,如果声明在第二层for循环内,那么其作用范围就限定在第二层for循环内。
你的代码错误是因为,每次for循环都需要把isPrime 重置为1,如下:
对于内层for循环,在开始前你必须将 isprime标志恢复为1啊
否则像你现在这样,当执行完4的处理后,isprime标志将会被设置为0,即4不是素数。但后续数值判断时,由于isprime一直是0,没有被恢复为1,就永远都不会是素数了。所以在判断每个数值是否为素数前,你需要将isprime这个标志变量重新恢复为1,才能正确判断每个数值。
额,是这样的,在内层定义变量的话就表示变量的作用域实在for循环里边,如果你在for之外还想用它的话,编译器时会报错的;如果是外层定义变量的话,作用域实在整个main()函数里面。你在main函数中如果想要用到这个变量的话,就必须在外层定义变量,反之,就在内层定义好了,我个人建议在内层定义
求采纳!
放在for循环外面的话,isprime被赋值后就不变了,后面的数都判断不了,放for循环里面的话,每判断一个数,isprime的初始值都为1
理解1、引用型变量
如果变量申明在for循环【外层】,那么for循环内多次对变量进行赋值时,相同的属性,【后面的赋值会覆盖前面的赋值】。
如果变量申明在for循环【内层】,for循环内多次对变量进行赋值时,相同的属性,【后面的赋值不会覆盖前面的赋值】。
理解2、计算机内存
对于在for循环外层申明的变量,for循环内多次对变量进行赋值时,操作的是同一处内存空间,同一个变量。
对于在for循环内层申明的变量,for循环内每次在对变量进行赋值时,都会为变量开辟新的内存空间,即使这些变量在调用时的变量名一样,但是for循环每循环一次,之前申明的变量就已经出栈了(JS没有块级作用域,所以直到变量所在所在方法执行完毕之后,局部变量才会出栈),所以其实不存在说多个变量名相同的变量存储在内存中不同区域,变量名实际上用完即出栈。
理解3、index变量
for循环外部申明index变量时,后面的赋值覆盖前面的赋值,
for循环内部申明index变量时,后面的赋值不会覆盖之前的赋值。原因是基本类型也分成员变量和局部变量,局部变量随着方法入栈就存在栈中,而成员变量会随着对象在堆中空间的开辟而存储在堆中。
外部定义简单的代码理解实例:
var indexOuter:int=-1;
var recordIndexOuter:int=indexOuter;
for (var i:int=0; i < 5; i++)
{
indexOuter=i;
console.log("recordIndexOuter=" + recordIndexOuter);
}
这个主要还是根据你的实际业务需求,原则是能在循环外定义的就不要放在循环内定义,循环内定义会造成每次循环都会创建对象,从而消耗内存资源。
1、在for循环内定义变量
该方式会在内存中创建num个Object对象引用,若num较大,则会消耗大量内存
2、在for循环外定义变量
该方式使得内存中只有1份Object对象引用,每次为obj赋值时,仅是Object对象引用指向不同的Object,而内存中只有1份,节省了内存空间