一、for语句
for(1; 2; 4){
3;
}
1:定义语句
2:判断语句
3:执行体
4:(迭代)变化语句
1->2(true)->3->4->2(ture)->3->4->2->3->4->2(false)
var oBtn = document.getElementById('btn');
var oBox = document.getElementById('box');
oBtn.onclick = function(){
var str='';
for(var i = 0;i<10;i++){
str += "<div></div>";
console.log(str);
}
oBox.innerHTML += str;
}
二、遍历数组
var oLis = document.getElementsByTagName('li');
for(var i =0;i<4;i++){
oLis[i].index = i;
oLis[i].onclick = function(){
alert(this.index);
alert(i);
}
}
三、遍历字符串
var str = "?";
var str = "54321";
console.log(str.length);
console.log(typeof str);
for(var i=0; i<str.length; i++){
console.log(str[i]);
}
四、跳出循环和终止循环
- 跳过某一个循环:continue。
- 终止循环:break。
for(var i=0;i<50;i++){
if (i == 25) {
console.log(i+10);
continue;
}
console.log(i);
}
for(var i=0;i<10000;i++){
if (i == 25) {
console.log(i+10);
break;
}
console.log(i);
}
五、label标签
- 用于给for循环打个标记,便于终止和跳出。
- 可以看做一个变量,但是不能用var定义,会报错。
out:
for(var i=0;i<2;i++){
in:
for( var j = 0;j<3;j++){
if (j === 2) {
continue out;
}
console.log(`里层执行了第${j}次`);
}
console.log(`外层执行了第${i}次`);
}
六、for循环的性能
- 使用
console.time('tag')
和console.timeEnd('tag')
系统会打印出大致的代码执行时间。 - 尽量减少回流:当我们在页面上增加元素,改变元素宽高,放大缩小我们的窗口,改变标签的属性"" ,此时页面会发生重新渲染。
- 尽量把arr.length取出来,再循环。
var oBtn = document.getElementById('btn');
var oBox = document.getElementById('box');
oBtn.onclick = function(){
console.time('tag1');
for(var i = 0;i<10;i++){
oBox.innerHTML += "<div></div>";
}
console.timeEnd('tag1');
}
var oBtn = document.getElementById('btn');
var oBox = document.getElementById('box');
oBtn.onclick = function(){
console.time('tag1');
var str='';
for(var i = 0;i<10;i++){
str += "<div></div>";
}
oBox.innerHTML += str;
console.timeEnd('tag1');
}
var oLis = document.getElementsByTagName('li');
console.time('tag1');
for(var i=0;i<oLis.length;i++){
oLis[i].style.backgroundColor = '#f60';
}
console.timeEnd('tag1');
console.time('tag2');
var i=0,
len=oLis.length;
for(; i<len;i++){
oLis[i].style.backgroundColor = '#f60';
}
console.timeEnd('tag2');
console.time('tag3');
for(var i=-1;oLis[++i];){
oLis[i].style.backgroundColor = '#f60';
}
console.timeEnd('tag3');
七、文档流
document.write
只会写入到一个打开的文档流中,将内容追加到body后边。- 如果用
.write
书写js代码的时候,需要用到转义\
。 - 当window的资源加载完毕之后,我们认为文档流关闭,此时
write
会重新打开文档流,覆盖原有内容。 - 注册事件不影响文档流加载,代码读取完毕之后,注册的事件还在。
var oBox = document.getElementById('box');
window.onload = function(){
document.write(`<script>alert(1)<\/script>`);
}
document.onclick = function(){
document.write(`123'`);
}