7

通常の関数ではなく式で IIFE を使用しているコードに遭遇しました。

var custom_type = (function() {
    return $('#myDiv').attr('custom_type');
})();

通常、私はこれを次のように書きます。

var custom_type = function() {
    return $('#myDiv').attr('custom_type');
};

IIFEの理由は何ですか? 私が考えることができる唯一のことは、IIFE がcustom_type変数を最初に 1 回だけ割り当てる可能性があるのに対し、2 回目は変数が参照されるたびに更新された型をチェックし続ける可能性があるということです。

4

4 に答える 4

6

この例では、関数を完全に省略して、次のようにすることができます。

var custom_type = $('#myDiv').attr('custom_type');

ただし、一般に、変数割り当てのより複雑な「ジャストインタイム」計算には IIFE を使用できます。何かを反復する必要がある場合は、IIFE を使用するのが好きなのでi、現在のスコープを汚染することなく使用できます。

ただし、2 番目の例では、結果はまったく異なります。関数を呼び出して現在のcustom_type()値を取得する必要がありますが、コードの最初の部分はその値を一度取得し、変数はその値を保持します。

于 2014-04-09T22:53:07.587 に答える
3

IIFE は実際に実行されるため (即時に呼び出される関数式)、変数はその応答に設定されます。

これを示す JSFiddle を次に示します。JS コンソールで出力を確認してください: http://jsfiddle.net/Y4JmT/1/

ここにコード:

var custom_type = (function() {
    return 'foo';
})();

var custom_type2 = function() {
    return 'bar';
};

console.log('iife = ' + custom_type);
console.log('non-iife = ' + custom_type2);

JS コンソールに次のようなものが表示されます。

iife = foo 

non-iife = function () {
    return 'bar';
} 
于 2014-04-09T22:51:42.750 に答える
2

あなたの最初のもの(IIFE)は関数を実行してその結果を保存し、秒は関数を定義として保存します。

(function(x) {
    return x * 2;
})(5);

通常の関数 func(arg1, arg2) のような呼び出しを行っていますが、関数名の代わりに関数定義全体を渡すため、上記は次のように10を返します。

function multiply(x) {
    return x * 2;
}

multiply(5);

彼らは同じことを意味します、あなたは電話をかけています。1 つ目はほとんどありませんが、2 つ目は定義と呼び出しです。

于 2014-04-09T22:56:55.400 に答える
1

IIFE を使用すると、作成時に関数 (匿名またはその他) を呼び出すことができます。これを見たことがありますか? http://benalman.com/news/2010/11/immediately-invoked-function-expression/

于 2014-04-09T22:57:56.777 に答える