#1の混乱の点は、関数式として関数が作られているということです。この関数は実数です(真理としてif文を渡します)が、関数文ではないので、そのために外部のf
参照は作成されません。
関数を変数に代入するのと同じ概念です。関数式を作成しています。
関数式は、実際にそれを変更しない命名 var g = function(){};
:
var g = function f(){};
// it would still only be externally accessible as g, not f
それが唯一の関数の内部からf
としてアクセスできるようになります。
var g = function f(){ alert(f); };
g(); // will call the function, and from inside f will work
関数としてf
ようにするにはステートメント(式の代わりに)では、現在のスコープ内で独自に定義する必要があります。
function f() {}
// now we can reference it as f externally as a statement!
の方法でも、ただ一つの文字と、それは代わりに、表現になり...#2については
!function f() {}
// now we can't :(
、非常に単純:削除は、オブジェクトのプロパティのためです。このような:
var obj = {};
obj.foo = 'bar';
delete obj.foo;
alert(obj.hasOwnProperty('foo')); // <- false
ありがとうこれらの有用な情報のためにたくさん! – Kelvin