2017-01-08 8 views
2

ネストされた関数内でネストされた関数内での関数をネストするデメリットは何ですか...ここお互いに機能を入れ子にするのは悪い習慣ですか?

は例です:

JS/jQueryの:

function one() { 

    // do something 

    function two() { 

     // do something 

     function three() { 

      // do something 

      function four() { 

       // do something 

      } 

     } 

    } 
} 
+2

いいえ、何も問題はありません.jsでは、通常は良いことです。 – dandavis

+2

http://i.imgur.com/BtjZedW.jpg – BrunoLM

+0

クロージャ変数に依存する場合、内部関数は[純関数](https://en.wikipedia.org/wiki/Pure_function)ではない可能性があります。 –

答えて

1

一つdisadvantageネストされた宣言の機能とは、parent関数を呼び出すたびに関数の環境内で作成されることです。

関数が頻繁に呼び出された場合、理論的にはこれはdecreaseのパフォーマンスになる可能性があります。

しかし、入れ子関数はjavascriptで非常に使用されています。たとえば、closuresは非常に強力で、すべてのJavaScript開発者が理解する必要があります。

closuresについてもっと読むあなたが深くネストされた関数から親のスコープ内の状態を変えることができるので、here.

+0

ネスティングはスタックとは関係ありません。 – SLaks

+0

@SLaks、あなたの点に感謝します。 –

1

ネストされた関数は、その親スコープへのアクセス権を持っています。たとえば、

function one() { 
    var a = 1; 
    two(); // a = 4 

    function two() { 
    var b = 2; 
    three(); // b = 4 

    function three() { 
     var c = 3; 
     four(); // c = 4 

     function four() { 
     a = 4; 
     b = 4; 
     c = 4; 
     } 
    } 
    } 
} 

これはかなり強力です。一方で、子関数がその親のいずれかの値を変更していないことを確認しなければならないので、簡単に推論するのが難しく、難しい場合があります。

関数を入れ子にしない場合は、関数内の状態がネストされた関数の内部から変更されていることを心配する必要はありません。

function one() { 
    var a = 1; 
    two(); // a = 1 
} 

function two() { 
    var b = 2; 
    three(); // b = 2 
} 

function three() { 
    var c = 3; 
    four(); // c = 3 
} 

function four() { 
    a = 4; 
    b = 4; 
    c = 4; 
} 
関連する問題