2011-01-24 13 views
0
function outer(x) { 
    function inner(y) { 
     if (y) console.log(y); 
     else console.log(42); 
    } 
    inner(x + 1); 
} 
outer(5); // expect a logging of '6' 
inner(); // expect a Reference Error 

私はそれが何をすべきかを知っていますが、私はそれだけを期待していますが、内部機能を宣言する際に気をつけなければならないクロスブラウザーの癖や副作用があります。内部関数の宣言は安全ですか?

私は意味[編集]

安全なことではそれは、彼らがグローバルな名前空間を汚染したり、彼らがで宣言された関数に対してローカルであるものとして扱われていない可能です。

[/編集]

答えて

1

私の知る限りいいえ。

var inner = function inner2() { 

} 

が、他のすべては問題ないはずです:IEはという名前の関数式等との問題を抱えています。

+0

内側の関数として使用という名前の関数式は、グローバル名前空間にfuncion 'inner'の範囲を巻き上げることをしていますか? – Raynos

+0

@Raynos:いいえ、IEは1つではなく2つの関数を作成しますが、同じスコープにとどまります。 –

+0

'var name = function name(){...}'を使用すると、奇妙な副作用がありますか?IEの関数宣言と関数式に同じ名前を使用する場合は、 – Raynos

0

通常のECMAScriptの構文です。それはクロージャーと "内部関数"を可能にします。ある関数内のステートメント(関数宣言とvar)は、その関数内でスコープされます。あなたの例では

、機能innerouterの範囲内に存在します。 inner()を呼び出そうとするときの参照エラー以外のものは、 "奇妙な"ものとみなされるべきです。


UPDATE:Found a questionはおそらく、この1に関連します。

0

私は、あなたが「安全」で何を意味するかわかりません。 あなたの例ではouter()の外側からinner()を起動する方法はありません。 「安全」が機能の可視性だけを意味する場合、あなたの権利は安全です。

+0

は、それは彼らがグローバルな名前空間を汚染したり、彼らがで宣言された関数に対してローカルであるものとして扱われていない可能です – Raynos

+0

インナー - 。外側へのローカルとして扱われます – Alexandr

関連する問題