- for循环的基础使用
for(i=0;i<=10;i++){
console.log(i)//1-10
}
console.log(i)//11,内存泄漏
为何会出现11呢,这是因为循环迭代到11的时候,退出循环会保存最后的值,所有就会被外面的console获取=========我个人认为就是循环到了11的时候,就已经泄漏了。所以外面就能获取,但是因为后面又判断了,所以里面的console等于1-10.
- 如何解决内存泄漏
<script>
for(i=0;i<=10;i++){
console.log(i)//1-10
}
console.log(i)//11,内存泄漏
for(let i=0;i<=5;i++){
console.log(i)//1-5
}
console.log(i)//11,使用了let块级作用域
</script>
for(i=0;i<=5;i++){
setTimeout(()=>console.log(i),0)//6
}
for(let i =0;i<=5;i++){
setTimeout(()=>console.log(i),0)//1-5
}
个人理解:就是for是同步的,settimeout是异步的,就是当for循环全部执行完之后,异步就相当于在外面console,所以内存会泄漏,变成let块级作用域之后,console就在里面了=====官方的话:因为let会为每一次迭代的变量赋值一个新的变量,所以settimeout引用的都是不同的变量实例
- 以下为for循环的小案例
for(i=1;i<=9;i++){
document.write("<table><tr>")
// document.write("<br>")
for(j=1;j<=i;j++){
// console.log(i+'*'+j)
document.write("<td>"+i+'*'+j+'='+i*j+'</td>')
}
document.write('</tr></table>')
}
嵌套循环里面j<=i是一定要的,不然会重复执行,document.write(’《/tr></table》’)不要写在嵌套循环里面,不然只有一次循环有作用,拼接字符串要用+号
var sum = 0;
for(var i = 1;i <= 3; i++){
sum += i;
//sum=1+2=3,3+3=6
}
console.log('1-3之间整数的和 = ' + sum);
sum=1+2=3,3+3=6
str=""
for(i=0;i<6;i++){
for(j=i;j>=i;j--){
str += '*';
console.log(str)
}
*
for.html:30 **
for.html:30 ***
for.html:30 ****
for.html:30 *****
for.html:30 ******
一直叠加到6。0,1,2,3,4,5
- for-in遍历非数组对象对象
person ={name:1,age:2}
var a =""
for(a in person ){
console.log(person[a])//将所有值丢进去a里面,输出1,2
}
不是很懂能用来干嘛
- for-of语句
person= [1,2,3]
for(var t of person){
console.log(t);//1,2,3
}
遍历可迭代的对象,比如数组,person={name=1}这个就不行,不能迭代