Вот тест, который я пытаюсь передать:Почему «возврат» не прерывает мой цикл?
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;
};
То, что я считаю, что я делаю в моей происходят функции:
- Взятие параметров (массив и функция
- Итерация по массиву (в поле для каждого)
- Если blah (el) неверно, верните false (не должно ли это прерывать цикл и возвращать false, когда функция, переданная в значение false, принимает значение false?
- return true, если нет никаких ложных значений
- ** В настоящее время я не имею случай для пустого массива.
Я пропустил трюк с тем, как работает возврат? Я предоставил ее repl.it сессии ниже (ссылка). Я включил console.log внутри оператора if, и он регистрирует ложь, когда значение ложно, но возвращаемое значение все равно не выводит или не прерывает цикл.
возвращение * только когда-либо * возвращается из * ближайшей функции ограждающей *. То есть обратный вызов 'forEach' в указанном выше коде. (Функция 'forEach' не возвращает ничего полезного, я бы создал' any/some' или 'filter' - оба из которых существуют в ES5/5.1 - вместо этого и использовать возвращаемое значение.) – user2864740
Я думаю, что один из мои проблемы с моим пониманием не полностью обертывают мою голову вокруг функций «обратного вызова». Я не слишком уверен, что вы подразумеваете под «ближайшей закрывающей функцией». Как определяется «ближайший»? – HelloWorld