我不知道这是可能的(是吗?)
下面的代码显然记录了值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;返回最后还是?
答案 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]);}
}