3

内部機能はどうなっているのだろうか?私はあなたが次のように書くことができることを知っています

var obj = {
       test: 'something'
}

しかし、このコードでは、innerfunction は変数ではなく関数を参照しています。内部関数を記述/呼び出す別の方法はありますか?

function outer(){

    var a = "Outerfunction";
    console.log(a)

    innerFct: function InnerFct()    {                                              
            var c = "Inner";
            console.log(c)
    }innerFct();
}
window.outer();

ありがとうございました

4

3 に答える 3

3

ここでは、いくつかの異なることが起こっています。

このコードでは:

var obj = {
    test: 'something'
}

「リテラルオブジェクト表記法」を使用して作成しています-まあ、1つのプロパティtestを持つオブジェクトで、そのプロパティの値はsomething

2 番目のケースでは、コード ブロックを作成しています (はい、オブジェクトとコード ブロックの両方が同じ構文{...}を使用してそれらを定義するのは楽しいことです。

コード ブロック内では、innerFct:がラベルになります。ラベルは、いくつかの制御フロー ステートメントでジャンプするために使用されます。それらのことは忘れてください。実際には使用しない方がよいでしょう。

function outer(){
    var a = "Outerfunction";
    console.log(a)

    function innerFct()    {                                              
        var c = "Inner";
        console.log(c)
    }
    innerFct();
}
outer();

あるいは

function outer(){
    var a = "Outerfunction";
    console.log(a)

    var innerFct = function ()    {                                              
        var c = "Inner";
        console.log(c)
    }
    innerFct();
}
outer();
于 2013-02-28T05:29:52.293 に答える
1

と混同functionsしていobjectsます。

オブジェクトを使用する場合、コロンはキーと値のペアを示すために使用されます。

var object = {
  innerFct: function(){
    console.log('rawr');
  },
  someVariable: 7
}

object.innerFct(); //logs rawr
object.someVariable = 4; //just changed from 7 to 4

例でコロンを使用する方法は、構文が正しくありません。また、そのようなオブジェクト内で関数を作成している場合、オブジェクトの名前に既に割り当てているため、関数に再度名前を付けることはありません。

次に、次のようにしていつでも関数を編集できます。

object.innerFct = function(){
  //new code
}

実行object.innerFct()すると、関数が呼び出されます。

于 2013-02-28T05:29:12.273 に答える
0

他の回答は、オブジェクトの構文とスコープ内での関数の呼び出しを十分にカバーしています。コメントで述べたように、これを行うことができます:

function outer(){
    (function () {
        var c = "inner";
        console.log(c)
    })();
}
window.outer();

そして、それは問題なく記録されinnerます。

編集:元のコード サンプルのようなプライベート/非表示の変数innerFctは、クロージャーでもキャプチャできます。

outer = function() {
    var innerFct = function () { console.log("inner"); }
    // innerFct is captured in the closure of the following functions
    // so it is defined within the scope of those functions, when they are called
    // even though it isn't defined before or after they complete
    window.wrapper = function() { innerFct(); }
    return function() { innerFct(); }
}
outer();

// each of these next three lines logs "inner"
window.wrapper();   // assigned to global variable
outer()();          // calling the returned function
var innerFctBackFromTheDead = outer(); // saving the returned function
innerFctBackFromTheDead();

オブジェクト コンストラクター/プロトタイプ構文もあります。

function Outer() {
    this.inner = function() {
        this.c = "inner";
        console.log(this.c);
    }
}

var out = new Outer();
out.c;       // undefined
out.inner(); // logs "inner"
out.c;       // "inner"

新しいキーワードとプロトタイプの詳細: http://pivotallabs.com/javascript-constructors-prototypes-and-the-new-keyword/

于 2013-02-28T05:46:26.383 に答える