0

高度なJavascriptの技術的な理解が少し不足しているため、これを正しく尋ねているかどうかは完全にはわかりません。しかし、私が関数を持っているとしましょう。この関数()内で、プライベート変数として作成されるfoo引数()が渡されます。bar

function foo(bar){
    console.log(bar);
}
foo("wassup");

割り当てられていbarなくても、宣言されずにプライベートスコープを保持すると考えるのは正しいですか?それもオブジェクトのままですか?したがって、これを行う代わりに:

function foo(){
    var bar = {
        message: "wassup"
    };
    console.log(bar.message);
}
foo();

私はこれを行うことができます:

function foo(bar){
    bar = {
        message: "wassup"
    };
    console.log(bar.message);
}
foo();

このように引数をオブジェクトとして使用することの意味は何ですか?すべてがチェックアウトされているようで、コードは問題なく機能しますが、私が気付いていない結果があるかどうか疑問に思いました。

ありがとう

4

1 に答える 1

1

これはクロージャの例です。2番目の関数fooは、バーを介してクロージャを形成しています。クロージャーを使用したコーディングには結果がありますが、ありがたいことに、それらは主にエンジンによって対処され、通常はコーダーの関心事ではありません。実際、クロージャーの形成はデータカプセル化の優れた形式と見なされており、多くのパターンはこの手法に大きく依存しています。

最後のfooのデクレレーションでは、渡された引数を「マスキング」しています。(必要に応じてvarを前に配置すると仮定します)barの前に「var」を配置しなかったため、fooの2番目のデクレレーションは、変数barをグローバル名前空間に割り当てることに注意してください。意図していませんでした。

于 2013-01-30T18:19:23.327 に答える