1. ホーム
  2. javascript

[解決済み] JavaScriptネスト関数

2022-10-13 08:14:56

質問

javascriptのコードで、理解できないものがあります。

function dmy(d) {
    function pad2(n) {
        return (n < 10) ? '0' + n : n;
    }

    return pad2(d.getUTCDate()) + '/' +
       pad2(d.getUTCMonth() + 1) + '/' +
       d.getUTCFullYear();
}

function outerFunc(base) {
    var punc = "!";

    //inner function
    function returnString(ext) {
       return base + ext + punc;
    }

    return returnString;
}

関数を別の関数の中で定義するにはどうしたらよいでしょうか?my()関数の外からpad2()を呼び出すことは可能でしょうか?

何か光を当ててください。ありがとうございます。

どのように解決するのですか?

関数は、JavaScriptにおける変数のもう一つのタイプです(もちろん、いくつかのニュアンスはありますが)。別の関数内に関数を作成すると、変数のスコープを変更するのと同じ方法で関数のスコープが変更されます。これは、グローバルな名前空間の汚染全体を減らすためにクロージャで使用する場合に特に重要です。

別の関数内で定義された関数は、関数の外部からアクセス可能なオブジェクトにアタッチされていない限り、関数の外部からはアクセスできません。

function foo(doBar)
{
  function bar()
  {
    console.log( 'bar' );
  }

  function baz()
  {
    console.log( 'baz' );
  }

  window.baz = baz;
  if ( doBar ) bar();
}

この例では、baz 関数は foo 関数が実行された後に使用できるようになり、オーバーライドされた window.baz . に含まれるスコープ以外のコンテキストでは、bar 関数は使用できなくなります。 foo 関数に含まれるスコープ以外のコンテキストでは利用できません。

を別の例として

function Fizz(qux)
{
  this.buzz = function(){
    console.log( qux );
  };
}

Fizz 関数はコンストラクタとして設計されており、実行時に buzz 関数を割り当てるように設計されています。つまり、次のような使い方をします。

const obj = new Fizz();
obj.buzz();

を呼び出した後、オブジェクトを保持する必要がない場合は、より簡潔に buzz ):

new Fizz().buzz();