2012-11-25 21 views

Antwort

9

Der Operator ! verhält sich wie normal und negiert den Ausdruck. In diesem Fall wird es verwendet, um die Funktion zu einem Funktionsausdruck anstelle einer Funktionsanweisung zu zwingen. Da der Operator ! auf einen Ausdruck angewendet werden muss (es macht keinen Sinn, ihn auf eine Anweisung anzuwenden, weil Anweisungen keinen Wert haben), wird die Funktion als Ausdruck interpretiert.

So kann es sofort ausgeführt werden.

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

Wenn die Funktion 'true' zurückgibt, wird sie in' false' geändert? –

+1

@Derek Ja, jeder truthige Wert, der von der Funktion zurückgegeben wird, wird zu false und umgekehrt negiert. In dem Code wird jedoch das OP, auf das der zurückgegebene Wert bezogen ist, nicht verwendet, so dass der Zweck des '!' Nur darin besteht, dass die Funktion sofort aufgerufen werden kann. – Paulpro

+0

Also ist '!! function() {}' besser, wenn der zurückgegebene Wert wichtig ist? –