2016-03-10 77 views
2

這個JavaScript應該運行功能funclen次,然後返回是否成功的所有時間或沒有。相反,只要func返回false,for循環即被取消。這怎麼解釋? (jsfiddle怪異的行爲在javascript函數

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

迂腐:你可以只返回'res',而不是返回'RES == TRUE' – ray

+0

可能在某些情況下,返回不確定,不解決問題。 – Aloso

回答

8

因爲第一個函數返回falseres = res && func(0)將分配給falseres。執行線上的下一個時間,即res = res && func(1)func(1)將不被執行,因爲res是(並保持)false

&&short-circuiting。鑑於a && b,如果a計算結果爲falseb將無法​​在所有的評估。

+0

謝謝!這工作:res = func(i)&& res; – Aloso