0

関数式inneroneとを使用して 2 つの関数を宣言しinnertwoました。私は最初に宣言しinnerone、その後innertwo。内部では関数inneroneを呼び出していinnertwoます。しかし、私の懸念は、巻き上げられていないことを意味する関数式を使用しinnertwoた後に宣言していることです。では、なぜこれらの関数がこの順序で機能するのでしょうか? 順序を変更することは必須ですか?inneroneinnertwo

ここにコードがあります

var one = function () {
    var innerone = function () {
        innertwo();
    },

    innertwo = function () {
        console.log('innertwo');
    };

    return {
        innerone: innerone
    };
};

var o = new one();
o.innerone();
4

2 に答える 2

5

innerone は、呼び出したときにのみ呼び出されるため、機能しています。そしてそれが呼び出されるまでに、innertwo が定義されます。

于 2012-11-10T08:37:02.880 に答える
0

このコードを書くためのより簡単な方法をコメントで尋ねたので、ここにいくつかのより簡単な方法があります。最初のものはまだ構造体を返し、 なしで関数として呼び出すことができますnew。2 つ目は、関数オブジェクトにプロパティを追加しますが、プライベート関数は引き続き保持しますinnertwo()。2 番目のオプションは、私には最もきれいに見えます。

オプション1:

function one() {
    function innertwo() {
        console.log('innertwo');
    }

    return {
        innerone: function() {
            innertwo();
        }
    };
}

var o = one();    // new is not needed here
o.innerone();

オプション 2:

function one() {
    function innertwo() {
        console.log('innertwo');
    }

    this.innerone = function () {
        innertwo();
    };
};


var o = new one();
o.innerone();
于 2012-11-10T09:02:36.597 に答える