問題タブ [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.

0 投票する
4 に答える
36497 参照

javascript - 高度な JavaScript: この関数が括弧で囲まれているのはなぜですか?

重複の可能性:
JavaScript の (function() { } )() コンストラクトとは何ですか?

この JavaScript コードに出くわしましたが、それから何を作成すればよいかわかりません。このコードを実行すると「1」になるのはなぜですか? (1) のこの奇妙な小さな付録は何ですか? 関数が括弧で囲まれているのはなぜですか?

0 投票する
3 に答える
389 参照

javascript - 即時呼び出し関数式の何が問題になっていますか?

私は以下の非常に単純なIIFEを実行しようとしましたが、

結果として、スクリプトが「定義済み」ではなく「未定義」と警告するのはなぜですか?

@編集

スクリプトは、次の点を除いて期待どおりに機能しました。

  • 意図しないtypeof obj.prop === undefinedものは間違っていますが、obj.prop === undefined代わりに使用する必要があります。
  • 以下の括弧を省略すると、スクリプトは期待どおりに機能しませんが、rhinoから構文エラーは発生しません。

    function(_obj) {_obj.prop = 'defined';}(obj);

0 投票する
3 に答える
1388 参照

javascript - Java JVM/Rhino 64k バイトコード制限に収まるように IIFE を分割する方法

可能な限り jQuery に近い構文を使用して、Rhino を介してサーバー側のスクリプトを実行できるようにしたいと考えています。理想的には、サーバーで jQuery を使用したいだけです。

現在、Rhino + Env.js + jQuery は機能しますが、最適化がオンになっていない場合 ( http://bugs.sun.com/view_bug.do?bug_id=4262078cx.setOptimizationLevel(-1);のために実行する必要があります) 解釈された JS は、ツールの適用性を大幅に制限します。書いています。

自分でやろうとする前に、JavaScript の達人に、きちんとカプセル化された jQuery のコア (および同じスタイルで書かれた jQuery プラグインのいくつか) を分割する最良の方法は何かを尋ねたいと思います。つまり、次のような関数を分割する方法

機能的なチャンクに。

必要なのは、関数の一部を、実行後に同じ機能を持つ呼び出し可能なコードに分割することだけです。

0 投票する
3 に答える
3121 参照

javascript - Object.PrototypeメソッドとIIFE(即時呼び出し関数式)での「厳密な使用」

元のコード:

新しいコード:

このコードが立っているように、私が試みるとき:

var gitjs = new GitJs();

GitJsは未定義だと言われています

私が何を考えていたのか:

  • use strictすべてのメソッドの中に入れたくありません。
  • コードが縮小されて別のファイルに連結された場合に、コードを適切に再生したいと思います。
  • .prototype後で継承しやすくするために(そしてコードを明確にするために)構文を使用したい
  • var gitJsグローバル変数は他の誰かのスクリプトによって上書きされる可能性があるため、作成したくありません。
  • newユーザーは常にキーワードを介してオブジェクトコンストラクターを呼び出すと思います

記録のために、私は私が間違っていることを知っています。間違っています。私は自分の思考の欠陥がどこにあるのか理解できないようで、いくつかのガイダンスが欲しいです。

0 投票する
4 に答える
2325 参照

jquery - $ の代わりに iife で $ と jQuery を理解する

次の間に違いがあるかどうかを理解しようとしています:

対。

jQuery が $ に置き換えられていることに注意してください。これでよろしいですか?使えないからどこも使わないの?動作しますが、おそらく非標準ですか?それがエラーなのか、それとも大丈夫なのか、誰かがこれを説明してもらえますか? ありがとう

0 投票する
1 に答える
404 参照

javascript - IIFEを使用して割り当てられるようにカスタムバインディングハンドラーを変更する

カスタムバインディングハンドラーがあり、IIFEに変更したいと思います。私はインターネットでIIFEについて読んでいますが、カスタムハンドルをIIFEに変更する方法がわかりませんでした。では、次のバインディングハンドラーをIIFEに変更するにはどうすればよいですか?

0 投票する
2 に答える
8458 参照

javascript - 匿名関数呼び出しでNOT演算子を使用するのはなぜですか?(ノックアウト2.1.0)

重複の可能性:
感嘆符は関数の前に何をしますか?

KnockoutJS 2.1.0のソースコードを見ると、7行目から次のようなコード構造が見られます。

not演算子を使用すると、この式はtrueではなくに評価されundefinedますが、なぜわざわざするのでしょうか。

0 投票する
3 に答える
539 参照

javascript - いくつかのGreasemonkeyスクリプトの上部にあるこの行は何ですか?

背景: 私はC ++の独学の趣味レベルの理解を持っており、これはjavascriptの同様の理解に変換されています。javascriptをよりよく理解するために、Googleが同じドメインからの複数の結果を処理する方法の問題を解決するGreasemonkeyスクリプトを作成することにしました。

スクリプトを書いたのですが、驚くほど簡単でした。このスクリプトは他の人にも役立つと思うので、リリースしたいと思います。ただし、その前に、無責任なコードをリリースしていないことを確認したいと思います。

拡張機能の問題としてガベージコレクションが不十分であることがよくあることを知っており、それを防ぐためにjavascriptで何をする必要があるかについて調査しました。答えは、関数にラップされているメモリは、その関数が終了したときに再利用されるということのようです。これは、私が見たいくつかの人気のあるスクリプトが、他の方法では役に立たない関数にラップされた理由を説明しているようです。

これは私をこれらの質問に導きます:

  1. 基本的なJavaScript関数を使用して、メモリがリークしないようにするにはどうすればよいですか?
  2. これは、私が多くのスクリプトで見た答えです。

    /li>
  3. 上記のコードで、最初の括弧の目的は何ですか?それは私には冗長に思えます。

  4. その行を理解しようとしていたときに、次のように書き直しました。

    /li>

これは、以前は名前が付けられていなかった関数を呼び出すだけであるという考えです。しかし、これはうまくいきませんでした、なぜですか?

私は一般的な答えにもっと興味があります、しかしそれが必要な場合のためにここに私の現在のコードがあります:http: //pastebin.com/qQWKfnJT

0 投票する
2 に答える
1460 参照

javascript - IIFE 内の 'this' | ローカルスコープと同じ?

IIFE がある場合、これはローカル スコープを参照しますか?

Su.$aIIFE のどこでも利用できるようにする必要があるため、質問しています。

でも電話したくない、電話しSu.$aたい$a

var it が最上位スコープの場合this.$aと同じことを言っていますか?var $a

0 投票する
2 に答える
925 参照

javascript - IIFEjquery対応

大量のJavaScriptを含むWebプロジェクトに取り組んでいますが、すべてを「$。」に追加していたため、名前空間の衝突が発生し始めました。

名前空間について読んで、http://addyosmani.com/blog/essential-js-namespacing/ですばらしい記事を見つけました。

推奨されているようにIIFE内に名前空間を設定しようとしましたが、関数はすでに次のように設定されているため、運が良かったと思いました。

だから私はそれを次のように変換しました:

(数時間の作業の後)実際にオリジナルが

つまり、すべてがjQueryのready()関数で呼び出されていたということです。

名前空間IIFEを維持したいのですが、jQueryのready()関数内でどのように使用するかがわかりません。これは可能ですか?もしそうなら、どのように?