javascript - 書き方 - jquery 即時 関数
関数の前に感嘆符は何をしますか? (8)
!function () {}();
IIFE(直ちに呼び出される関数式)を書く別の方法。
その別の書き込み方法 -
(function( args ) {})()
と同じ
!function ( args ) {}();
JavaScriptシンタックス101. 関数宣言があります :
function foo() {}
セミコロンはありません。これは単なる関数宣言です。 実際に関数を実行するには、 foo()
呼び出す必要があります。
さて、無害な外観の感嘆符を追加すると、 !function foo() {}
は式に変換します 。 これは関数式になりました 。
!
単独では関数を呼び出すことはできませんが、最後に()
を置くことができます: !function foo() {}()
!
即座にその関数を呼び出します。
だから、作者がやっていることは、関数式ごとにバイトを保存することです。 それをより読みやすい方法で書くことができます:
(function(){})();
最後に、 !
式をtrueに戻します。 これは、デフォルトではすべてのIIFEがundefined
で返されるため、 !undefined
がtrue
。 特に有用ではない。
!
あなたが結果として期待しているものを否定(反対)します。
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
は!undefined
がtrue
であるため!undefined
。 実際の戻り値を呼び出しの結果にするには、次のようにします。
(function () {})()