Der Punkt der Verwirrung auf # 1 ist, dass die Funktion als Funktionsausdruck gemacht wird. Die Funktion ist real (also übergibt sie die if-Anweisung als truthy), aber es ist keine Funktionsanweisung, daher wird keine externe f
-Referenz dafür erstellt.
Es ist das gleiche Konzept wie wenn Sie einer Variablen eine Funktion zuweisen: Sie machen einen Funktionsausdruck.
var g = function(){};
die Funktion Ausdruck Naming nicht wirklich das ändern:
var g = function f(){};
// it would still only be externally accessible as g, not f
es nur als f
aus dem Inneren der Funktion zugänglich sind:
var g = function f(){ alert(f); };
g(); // will call the function, and from inside f will work
Um f
als Funktion zu machen Anweisung (anstelle von Ausdruck) müsste sie in ihrem aktuellen Umfang wie folgt definiert werden:
auch nur ein Zeichen in der Art und Weise, und es wird ein Ausdruck stattdessen ...
!function f() {}
// now we can't :(
Für # 2, ganz einfach: Löschen ist für Objekteigenschaften. Wie zum Beispiel:
var obj = {};
obj.foo = 'bar';
delete obj.foo;
alert(obj.hasOwnProperty('foo')); // <- false
Vielen Dank für diese hilfreiche Info! – Kelvin