делайте кэширование и не делайте лишних операций! зачем при каждом клике искать однотипные элементы или зачем при каждом клике переопределять функцию, которая не меняет логику? это можно сделать один раз и потом вызывать.
var divs = $('div');
$('button').on('click', function(){
$(this).toggleClass('act');
divs.toggleClass('act');
});
var closeByDocument = function(docTarget, butTrigger, triggerElem, removeClass, butTriggerBullClass){
// docTarget - Элемент, при клике по документу
// butTrigger - Кнопка открытия элемента
// triggerElem - Открытие блока, при нажатии на кнопку
// removeClass - Имя удаляемого класса с блока и кнопки
// butTriggerBullClass - Удалять ли класс у кнопки
if(docTarget !== $(triggerElem)[0] && !$(triggerElem).has(docTarget).length && docTarget !== $(butTrigger)[0] && !$(butTrigger).has(docTarget).length){
$(triggerElem).removeClass(removeClass);
if(butTriggerBullClass){
$(butTrigger).removeClass(removeClass);
}
}
};
$(document).on('click', function(event){
var target = event.target;
// Закроем блок
closeByDocument(target, 'button', 'div', 'act', true);
});