for的常用方法想必大家都有了解,就不多加描述了。此文主要讲解for的三个参数能否选填。
for 里面存在3个参数
第一个参数:循环的初始值;
第二个参数:循环的条件;
第三个参数:循环进行的操作;
那么这些参数可不可以选填呢
举个例子:查找两个节点的最近的一个共同父节点,可以包括节点自身(oNode1 和 oNode2 在同一文档中,且不会为相同的节点)
function commonParentNode(oNode1, oNode2) {
for(;oNode1;oNode1=oNode1.parentNode){
if(oNode1.contains(oNode2)){
return oNode1;
}
}
}
第一个参数未定义,他代表的是初始值,但是未定义也可执行,代码块没有return的话会就一直执行,直到满足条件oNode1=oNode1.parentNode才会返回。
这样子看的话,下面两种写法也均可
function commonParentNode(oNode1, oNode2) {
for(;;oNode1=oNode1.parentNode){
if(oNode1.contains(oNode2)){
return oNode1;
}
}
}
function commonParentNode(oNode1, oNode2) {
for(let nowNode=oNode1;;nowNode=oNode1.parentNode){
if(nowNode.contains(oNode2)) {
return nowNode;
}
}
}
那么这样看前两个参数有时是可以不填的,那么第三个参数呢?
举个例子:小活动掷骰子向前跳,一个金币最多可掷两次,只有在掷到1的时候可以在掷一次,要求返回现在的位置。
let upSteps = function(num) {
const arr = [5,2,4,1,3,6];
let result = num;
for (let i = 0; i < 2;) { //最多两次机会
let key = Math.floor(Math.random()*6); //产生 0-5的随机数
result += arr[key]
i += arr[key] //如果选中了1的话那就太倒霉了,在给一次机会吧 此时i=1 ,可以再次循环
}
return result;
};
像这种情况的话,第三个参数也是可以省略的,但是仍要返回对 i 的操作。
总结
由此可见,我们可以根据需要对for的三个参数进行选填,但仍需注意循环结束条件不能少!