這裏是我試圖通過測試:爲什麼不'返回'打破我的循環?
describe("occur", function() {
var getVal = function(i) { return i; };
var even = function(num) { return num % 2 === 0; };
it("should handle an empty set", function() {
expect(occur([], getVal)).toEqual(true);
});
it("should handle a set that contains only true values", function() {
expect(occur([true, true, false], getVal)).toEqual(false);
});
it("should handle a set that contains one false value", function() {
expect(occur([true, true, true], getVal)).toEqual(true);
});
it("should handle a set that contains even numbers", function() {
expect(occur([0, 8, 32], even)).toEqual(true);
});
it("should handle a set that contains an odd number", function() {
expect(occur([0, 13, 68], even)).toEqual(false);
});
});
這裏是我的代碼:
var forEach = function(array, action){
for (var i = 0; i < array.length; i ++){
action(array[i]);
}
};
var occur = function(array, blah){
forEach(array, function(el){
if(!blah(el)){
return false;
}
});
return true;
};
什麼,我相信我在我的發生功能做:
- 拍攝參數(一個數組和一個函數
- 遍歷數組(在forEach中)
- 如果blah(el)不爲真,則返回false(不應該在循環中打開循環並返回false,只要傳入的函數計算結果爲false?
- 如果沒有任何錯誤值,則返回true
- **我沒有目前爲空數組實施的情況。
我錯過了如何返回工作的訣竅?我在下面提供了一個repl.it會話(鏈接)。我在if語句中包含了一個console.log,當值爲false但是返回值仍然不輸出或中斷循環時,它會記錄'false'。
回報*永遠只*從*最近的封閉函數返回*。也就是說,在上面的代碼中對'forEach'的回調。 ('forEach'函數不會返回任何有用的東西,我會創建一個'any/some'或者一個'filter' - 這兩個都存在於ES5/5.1中 - 而是使用返回值。) – user2864740
我認爲我對理解的問題並沒有完全圍繞「回調」功能進行。我不太確定'最近的封閉函數'是什麼意思。 '最近'是如何確定的? – HelloWorld