javascript函数中的奇怪行为

时间:2016-03-10 19:40:30

标签: javascript for-loop

这个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

1 个答案:

答案 0 :(得分:8)

因为第一个函数返回falseres = res && func(0)会将false分配给res。下次执行该行时,即res = res && func(1)func(1)将无法执行,因为res是(并停留)false

&&short-circuiting。给定a && b,如果a评估为false,则b根本不会被评估。