打破JavaScript' For'循环使用False?

时间:2015-10-05 06:36:16

标签: javascript for-loop break boolean-expression

我不知道这是可能的(是吗?)

下面的代码显然记录了值1到5,然后突破了'对于'循环,因为' false'返回值。

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x());

我的问题是:

  • 为什么for循环在“假”错误时会短路?退回?我看了MDN,但没有任何关于使用&#39; false&#39;打破for循环。也尝试过看ECMA的规格,但遗憾的是太棒了。

  • 为什么函数不返回&#39; true&#39;到了控制台,因为&#39;返回true&#39;声明存在于&#39; for&#39;之后。循环执行?即使错误以某种方式返回&#39;首先,也不应该是真的&#39;返回最后还是?

5 个答案:

答案 0 :(得分:5)

return false并没有打破你的循环,而是将控制权移回到外面。

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x())

输出:

0
1
2
3
4
5
false //here returning false and control also 

break会破坏你的循环而不是从函数中出来。

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) break;
    }
    return true
}

console.log(x())

将输出:

0
1
2
3
4
5 //after this loop is breaking and ouputing true
true 

答案 1 :(得分:2)

return语句结束函数,因此返回true行无法访问。希望有所帮助。

答案 2 :(得分:1)

  

下面的代码显然记录了值1到5,然后突破了   &#39;对于&#39;循环,因为&#39; false&#39;返回值。

错误,由于for而导致return循环突然出现,而不是因为false。您可以写return x具有相同的效果。点是,return立即从封闭的function中删除,无论当前正在执行的循环或条件。

答案 3 :(得分:1)

循环永远不会执行到10。只要i等于5,return false就会将控制权返回给函数x的调用者。return true行无法访问。
这是你的代码

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x());

输出: -

 0
 1
 2
 3
 4
 5
 false

如果您希望它达到return true语句,您可能需要在break循环中添加return false而不是for

for (var i = 0; i < 10; i++) {
            console.log(i);
            if (i == 5) break;//this will put it outside for loop
        }

答案 4 :(得分:1)

如果你不想搞乱return或break语句,你可以只添加一个布尔标志。在我的示例中,我使用isFound标志运行循环,直到您的要求满足或结束数组。

 def writeOutput(self,filename, writeOption='wb'):
    fp = open(filename, writeOption)
    if(fp):
        for i in self.results:
            res = self.results[i]
            for j in res:[enter image description here][1]
                item = res[j]
                text = item['text'].strip()
                label = item['label']
                writeStr = label+" , "+text+"\n"
                pickle.dump(writeStr,fp) 

所以输出将是:

const arr = [1,2,3,4,5];

for(let i = 0, isFound; !isFound; i++){
  if(i >= 3 || i >= arr.length){isFound = true;}
  else { console.log(arr[i]);}
}