2016-07-16 2 views
-1

デモクラスのtypescriptコードのコンパイル済みバージョンにいくつかの変更を適用することによって、次のコードを取得しました。私が得たIIFEを除去した後括弧で囲まれた関数(IIFE)の新しい演算子

function f() { 
    function Demo() { 
     console.log("Inside constructor"); 
    } 
    return Demo; 
} 

var Demo = (f)(); 
console.log("Creating instance"); 
var demo = new Demo(); 

// Output 
// Creating instance 
// Inside constructor 

、最初のケースで

function f() { 
    function Demo() { 
     console.log("Inside constructor"); 
    } 
    return Demo; 
} 

var Demo = f; 
console.log("Creating instance"); 
var demo = new Demo(); 

// Output 
// Creating instance 

、デモの起動時に実行さコンストラクタ。 2番目のケースでは、Demoを呼び出すとコンストラクターが実行されませんでした。各ケースでnewオペレータはどのように動作しますか?

+2

それは 'new'キーワードに関するものではありません、それはVARデモ=(f)は()'についてです – Rayon

答えて

3

var Demo = (f)();var Demo = f();と同じです。 fと呼び出し、戻り値(デモ機能)をDemoに割り当てます。

var Demo = f;は、Demoにf関数を割り当てます。

newオペレーターは同じように動作し、異なる値に適用するだけです。


生命維持

を除去した後、ここで全く生命維持はありません。

IIFEは関数式を持っています(関数宣言のみがあります)。すぐにそれを呼び出して()を呼び出して呼び出します。

あなたは電話をかけているか、電話していない機能(f)を持っています。

1

あなたはIIFEを削除せず、単に関数呼び出しを削除しました(f()fに変更)。

正しい変換がよりようになります。

オリジナルコード:

function f() { 
    function Demo() { 
     console.log("Inside constructor"); 
    } 
    return Demo; 
} 

var Demo = f(); 

インラインf

var Demo = (function f() { 
    function Demo() { 
     console.log("Inside constructor"); 
    } 
    return Demo; 
})(); 

インラインDemo(次の工程のために単一の発現にfを低減します):

var Demo = (function f() { 
    return function Demo() { 
     console.log("Inside constructor"); 
    }; 
})(); 

IIFE(すなわち、 )...function() { return ...; }()を回す:; `VARデモ= F '対;`

var Demo = function Demo() { 
    console.log("Inside constructor"); 
}; 
関連する問題