Логическое отрицание результата выполнения анонимной функции

В сорцах facebook был найден образец нижеизложенного кода. Подскажите, пожалуйста, назначение и смысл использования подобного приёма:

!function(){

}();


Оригинал:

!function(){
var c = document.documentElement;
var b = 'child_focused';
var d = 'DOMControl_placeholder';
var a = function(e){
e = e || window.event;
var f = e.target || e.srcElement, h = f.getAttribute('placeholder');
if (h) {
var g = Parent.byClass(f, 'focus_target');
if ('focus' == e.type || 'focusin' == e.type) {
if (f.value == h) {
f.value = '';
CSS.removeClass(f, d);
g && CSS.addClass(g, b);
}
}
else
if (f.value == '') {
CSS.addClass(f, d);
f.value = h;
g && CSS.removeClass(g, b);
}
}
};
c.onfocusin = c.onfocusout = a;
if (c.addEventListener) {
c.addEventListener('focus', a, true);
c.addEventListener('blur', a, true);
}
}();


Спасибо!
  • Вопрос задан
  • 2819 просмотров
Решения вопроса 1
barmaley_exe
@barmaley_exe
Смысл есть. Если не написать !, то функция будет распознана как function declaration, а ее нельзя сразу же вызвать, т.е.

function (){
/* body */
}()

Вызовет ошибку. Но добавив оператор, мы «конвертировали» наше function declaration в function expression, которое уже можно вызывать по вышеуказанной схеме. Стандартный эквивалент

(function (){
/* body */
})()
длиннее на 1 символ.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
blo
@blo
инженер-программист
!function(){}() без return'а в любом случае возвращает true.
А смысл зависит от контекста, в котором эта функция выполняется.
Ответ написан
Комментировать
juwain
@juwain Автор вопроса
В рассматриваемом случае возвращение true в качестве результата не имеет значения. Функция просто выполняется и результат ничему не присваивается и никуда не возвращается. Каков смысл тогда в использовании такой конструкции?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 13:28
20000 руб./за проект
07 мая 2024, в 13:07
7000 руб./за проект
07 мая 2024, в 12:59
500 руб./за проект