javascript - 書き方 - jquery 即時 関数




関数の前に感嘆符は何をしますか? (8)

!function () {}();

IIFE(直ちに呼び出される関数式)を書く別の方法。

その別の書き込み方法 -

(function( args ) {})()

と同じ

!function ( args ) {}();

JavaScriptシンタックス101. 関数宣言があります

function foo() {}

セミコロンはありません。これは単なる関数宣言です。 実際に関数を実行するには、 foo()呼び出す必要があります。

さて、無害な外観の感嘆符を追加すると、 !function foo() {}に変換します 。 これは関数式になりました

! 単独では関数を呼び出すことはできませんが、最後に()を置くことができます: !function foo() {}() ! 即座にその関数を呼び出します。

だから、作者がやっていることは、関数式ごとにバイトを保存することです。 それをより読みやすい方法で書くことができます:

(function(){})();

最後に、 ! 式をtrueに戻します。 これは、デフォルトではすべてのIIFEがundefinedで返されるため、 !undefinedtrue 。 特に有用ではない。


! あなたが結果として期待しているものを否定(反対)します。

var boy = true;
undefined
boy
true
!boy
false

あなたがboyに電話をすると、あなたの結果はtrueになりtrueが、瞬間にあなたは! あなたの!boy呼ぶとき、あなたの結果はfalseなるでしょう。 言い換えればNotBoyを意味しますが、今回は基本的にtrueまたはfalseブール値です。

それは!function () {}();起こる同じこと!function () {}(); 式、実行のみfunction () {}(); あなたにエラーのフラグを立てますが、追加して! あなたのfunction () {}();直前function () {}(); 式は、 function () {}();の反対にしfunction () {}(); それはあなたをtrue戻すはずtrue 。 例を以下に示します。

function () {}();
SyntaxError: function statement requires a name
!function () {}();
true

私たちがjavascript minificationを実行するときにデータのバイトを節約するだけです。

下記の無名関数を考慮する

function (){}

上記を自己呼び出し関数にするには、通常、上記のコードを次のように変更します。

(function (){}())

関数を呼び出すために必要な、関数の最後にadded (,)とは別に2つの余分な文字(,)を追加しました。 小型化の過程では、一般にファイルサイズの縮小に重点を置いています。 したがって、上記の関数を以下のように書くこともできます。

!function (){}()

それでもどちらも自己呼び出し関数であり、バイトも保存します。 2文字(,)なく、1文字を使用しました!


そして、ここに私はコンソールから分かった何かがあります。 前述したように、感嘆符は関数がブール値を返すようにします。

後者の構文の場合:

( function my_function() {} )()

私たちは次のようにすることができます:

(function add_them(a,b) { return a+b;} )(9,4)

同時の関数定義や呼び出しと同様です。

編集:
今、あなたは '!'の使い方を尋ねるでしょう。 タイプ関数定義。 次のことを考えてみましょう:

!function a_would_be_function() { alert("Do some junk but inside a function"); }()

上記のような関数を実行したいが、 '!' エラーが発生します。 私ははっきりしていると思う。


他のいくつかのバイトを保存しましょう!

(() => {})()

例:

(() => {return "yeah"})()

文がfalseに評価されるかどうかを返します。 例えば:

!false      // true
!true       // false
!isValid()  // is not valid

これを2回使用して値をブール値に強制することができます:

!!1    // true
!!0    // false

だから、より直接あなたの質問に答える:

var myVar = !function(){ return false; }();  // myVar contains true

編集:関数宣言を関数式に変更するという副作用があります。 たとえば、次のコードは、必要な識別子 (または関数名 )がない関数宣言として解釈されるため、有効ではありません。

function () { return false; }();  // syntax error

関数:

function () {}

何も返しません(または未定義)。

ときには、関数を作成するときに関数を呼び出すことがあります。 あなたはこれを試してみると誘惑されるかもしれません:

function () {}()

SyntaxErrorが返されSyntaxError

!を使う! 関数の前に演算子を置くと、式として扱われるので、それを呼び出すことができます:

!function () {}()

これは、関数の戻り値と反対の真偽値も返しtrue 。この場合、 true!undefinedtrueであるため!undefined 。 実際の戻り値を呼び出しの結果にするには、次のようにします。

(function () {})()




function