Operator !
zachowuje się normalnie, negując wyrażenie. W tym przypadku jest on używany do wymuszenia na funkcji wyrażenia funkcji zamiast instrukcji funkcji. Ponieważ operator !
musi być zastosowany do wyrażenia (nie ma sensu stosować go do instrukcji, ponieważ instrukcje nie mają wartości), funkcja będzie interpretowana jako wyrażenie.
W ten sposób można go natychmiast wykonać.
function(){
alert("foo");
}(); // error since this function is a statement,
// it doesn't return a function to execute
!function(){
alert("foo");
}(); // This works, because we are executing the result of the expression
// We then negate the result. It is equivalent to:
!(function(){
alert("foo");
}());
// A more popular way to achieve the same result is:
(function(){
alert("foo");
})();
Jeśli funkcja zwraca wartość "prawda", zmieni ją na "fałsz"? –
@Derek Tak, każda wartość prawdy zwrócona z funkcji zostanie zanegowana jako false i na odwrót. Jednak w kodzie, do którego odnosi się OP, zwrócona wartość nie jest używana, więc celem '!' Jest tylko zezwolenie na natychmiastowe wywołanie funkcji. – Paulpro
A więc jest '!! function() {}' lepiej, jeśli zwrócona wartość jest ważna? –