John Resig の Secrets of JS ninja スライドをフォローしていて、はっきりと理解できないものを見つけました。次のコードは、名前付き関数式を定義します。
var ninja = function myNinja(){
console.log(myNinja); // function myNinja() {...}
};
myNinja; // undefined
ご覧のとおり、現在のスコープ (グローバルであると仮定) ではninja
、名前付き関数への参照を保持する変数ですmyNinja
。ninja
variable はスコープ内でアクセス可能です - これは明らかですが、スコープ内ではmyNinja
アクセスできません (ただし、独自の関数内ではアクセス可能です)。どうして?
関数を定義する場合 (関数式ではなく関数宣言を使用):
function Cheese() {
console.log(Cheese);
}
その後、現在のスコープでアクセスできます。これがそのように機能することは知っていますが、誰かがその理由を説明できますか?