!(function(){//..処理..//}());の振る舞いが解りません。
今更ですが、JavaScript(ECMAScript5)を学習中です。
JavaScript
1!function(){ 2 // コード省略 3}());
上記コードは、単純に真偽値を問う即時関数だと解りました。
該当のソースコード
JavaScript
1!(function(root, factory) { 2 // コード省略 3})(this, function(global, $) { 4 // コード省略 5});
しかし、例えば、remodal.jsで現れるJavaScript本体ファイルでの次のコード
発生している問題
即時関数は理解できたのですが、
この場合の即時関数に似た形式を取っている前の
「NOT演算子」が表す関数の振る舞いが全く理解できません。
JQueryが複雑に絡んでいるというより、
JQueryありきのライブラリということは解りました。
試したこと
Googleで検索を2週間ほどかけても納得しうる記事はヒットしません。
唯一がこちらで見かけましたが、御質問者様が理解されているのを前提ですので、
私の抱いている疑問は解けませんでした。
例えば、次のような即時関数があった場合ですが、
JavaScript
1!(function(){ 2 return true; 3}());
これと次の違いはなく、
JavaScript
1!function(){ 2 return true; 3}();
これでは全く同じ結果のfalseが得られることは試して解りました。
また、見かけだけ同じかもしれないと重い、
再確認の意味で、次のように等値演算子で比較したところ、
JavaScript
1 var a =!(function(){return false;}()); 2 var b = !function(){return false;}(); 3 document.write(a===b);
aとbの変数オブジェクトは等しくtrueと出ました。
これは単純に()で囲っているか囲っていないかなので、等しくなるのは
当然と言われれば当然ですが・・・。
推測ですが、ただ、remodal.jsはライブラリとしてJavaScriptファイルのコード全体を
「NOT演算子」でパッケージする必要があるので、
JavaScript
1!(function(root, factory) { 2 // コード省略 3})(this, function(global, $) { 4 // コード省略 5});
このような形式を取っているだけなのか、もっと深い意味があるのか御質問させて頂きます。
曖昧な質問内容で申し訳ありません。
初めての質問ですので、情報の過不足や御無礼がありましたら、何卒御容赦下さいますようお願い申し上げます。
御回答の程、何卒、よろしくお願い申し上げます。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 12:45
2019/11/19 12:52
2019/11/19 13:06 編集
2019/11/19 22:44
2019/11/19 22:56