这个javascript应该运行函数func
len
次,然后返回它是否一直成功。相反,只要for
返回false,就会取消func
循环。怎么解释这个? (jsfiddle)
function do_something(func, len) {
var res = true;
for (var i = 0; i < len; i++) {
res = res && func(i);
}
return res == true;
}
do_something(function(x) {
console.log(x);
return false;
}, 5);
do_something(function(x) {
console.log(x);
return true;
}, 5);
我希望0, 1, 2, 3, 4, 0, 1, 2, 3, 4
,但输出如下:
0
0
1
2
3
4
答案 0 :(得分:8)
因为第一个函数返回false
,res = res && func(0)
会将false
分配给res
。下次执行该行时,即res = res && func(1)
,func(1)
将无法执行,因为res
是(并停留)false
。
&&
是short-circuiting。给定a && b
,如果a
评估为false
,则b
根本不会被评估。