2012-11-25 22 views

Odpowiedz

9

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"); 
})(); 
+0

Jeśli funkcja zwraca wartość "prawda", zmieni ją na "fałsz"? –

+1

@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

+0

A więc jest '!! function() {}' lepiej, jeśli zwrócona wartość jest ważna? –