問題タブ [iife]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - IIFE と潜在的な依存関係の問題を伴う Javascript MVC
独自のシンプルで小さな (オブザーバー) MVC の例を作成しようとしており、IIFE を使用してモデルとコントローラーのプライバシーを作成しようとしています。コントローラーは呼び出されたときにモデルオブジェクトを必要とするため、このアプローチについては確信が持てません。
私がやろうとしていることを示す機能する Fiddle を作成しましたが、この場合、最初に呼び出されるモデルに依存しています。管理を容易にするためにコントローラーとモデルを異なるファイルに入れたいのですが、この依存関係のためにこれを行うことができるかどうかわかりません。
これを回避する方法、またはこの種のことに対するより良い解決策はありますか?
(コード抜粋)
javascript - JavaScript での即時呼び出し関数式 (IIFE) - jQuery の受け渡し
IIFE であることがわかっている次のコードがあります。しかし、(jQuery) と ($) が何なのか、いまいち掴めませんでした。jQueryの参照をIIFEに渡すことに関係があることは知っていますが、誰かがそれらの目的を明確に説明できますか? あなたの助けと時間をありがとう:-)
javascript - 関数変数を簡潔に割り当ててすぐに呼び出すにはどうすればよいですか?
以下は、クロージャ内で無名関数を定義し、関数を呼び出して、それを忘れる方法です。
これは、スクリプトにバルクを追加せずに限定されたスコープを維持するために使用されます(IIFE:即時呼び出し関数式)。
次のように、将来の使用のために関数を保持しながら、関数をすぐに実行したい場合はどうなりますか。
これは、私がテストしたブラウザー(Chrome、FF、IE8、IE10)で機能しますが、JSLint(Bad Invocation)に合格しません。この方法で互換性の問題はありますか?
JSLintが親切に見ているこれを達成する方法はありますか?
javascript - IIFE内で機能参照を利用できませんか?
私が以下を実行した場合:
Chromeでは「TypeError:undefined is not a function」をスローし、Firebugでは「TypeError:fn isnotafunction」をスローします。
fn
する必要なしに、このスコープチェーンで利用できるべきではありませんwindow.fn
か?
奇妙な部分は、私が実行した場合:
その後、期待どおりに動作しfn
ます。関数としてログに記録され、ChromeまたはFirefoxのいずれでもエラーはスローされません。
これは、JSを理解していると主張するべきではないように、私をばかげていると感じさせています。
javascript - 即時呼び出し関数式 (IIFE) が自己実行匿名関数と異なるのはなぜですか?
EcmaScript では、呼び出された関数が新しい実行コンテキストを作成することは明らかです。関数内で定義されたすべての変数と関数は、その関数スコープ内でのみアクセスできます。しかし、クロージャーを使用すると、そのコンテキストの外で変数と関数にアクセスできます。IIFE は、すぐに呼び出される関数式です。簡単です。
しかし、IIFE が自己実行匿名関数と異なるのはなぜですか?私には完全には明らかではありません!?
javascript - 自己呼び出し関数による配列の初期化
自己呼び出し関数で配列を初期化しようとしています。例として簡単にするために、初期値は 0 から 4 までの数字の 2 乗であると仮定します。new
キーワードは新しいオブジェクトを作成するため、this.x
またはで新しく作成されたオブジェクトのフィールドにアクセスできます。キーワードthis[x]
に続く IIFE 本体内new
。コードは次のとおりです。
これで、 、 getarr
などの変数の対応するフィールドにアクセスできます。オブジェクトと同じように扱うだけならまったく問題ありませんが、配列のように扱おうとすると問題が発生します。つまり、次のような関数を適用することはできません。arr[4]
16
arr
reduce
これarr
は、実際には配列ではなくオブジェクトであるためです。
だからここに私の質問があります:このメソッド内でそのような動作を回避するにはどうすればよいですか? この新しく作成されたオブジェクトを配列として JavaScript に解釈させる方法は?
javascript - JavaScript の "x = x || {}" テクニックとは何ですか? また、この IIFE にどのように影響しますか?
まず、疑似コードの例:
次のように呼び出されます。
私の質問:
- の技術的な名前/説明は何ですか:
window.FOO = window.FOO || {}
?
私はコードが何をするかを理解しています...質問する理由については、以下を参照してください。
質問の理由:
渡されたグローバルを次のように呼び出しています。
foo
...しかし、グローバルが大文字と呼ばれていることを考えると、小文字の " "と呼ぶのは好きではありませんFOO
...混乱しているようです。
このテクニックの技術的な名前を知っていれば、次のように言えます。
彼らがそれを「 」と呼んだ最近の (素晴らしい) 例を見たことがありますexports
:
私は自分のコーディング規約を標準化しようとしているだけだと思います... プロが何をし、どのように考えているかを知りたいです (それが私がここで質問している理由です)!
javascript - IIFE はすぐには呼び出されません
以下のスニペットでは、IIFE init() は呼び出されません。必要に応じて、他のコードを投稿できます。
これはドロップダウンメニュー用です。私はテストしている$Frame.Support()
ので、これが何か関係があると確信しています。または、メソッドの引数になるようにコード構造を変更した方法です。
javascript - JS クラスを作成する: IIFE と戻りプロトタイプ
私が理解したいことを説明しようとする 2 つの例を見てみましょう。
と:
見てみましょう! どちらのクラスも関数式として作成され、どちらも同じように機能します。それらの唯一の違いは次のとおりです。2 番目は Car 関数を返し、prototype プロパティを回避し、代わりに IIFE を使用します。
return Car.prototype;
useと avoid IIFE と use return Car;
using IIFE (クラス宣言の最後の括弧)の違いは何ですか。
javascript - 関数式の前のJavaScriptプラス記号
私はすぐに呼び出される関数に関する情報を探していましたが、どこかでこの表記法に出くわしました。
+
関数の前の記号が何を意味するか/何をするかを誰かが私に説明できますか?