問題タブ [function-expression]

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 投票する
3 に答える
1255 参照

javascript - JavaScript で関数宣言をすぐに呼び出せないのはなぜですか?

すぐに呼び出すことができるのは関数式だけです。

しかし、関数宣言ではありませんか? これは、関数宣言が巻き上げられ、すでにすぐに実行されているためですか?

編集:私が参照しているリソース

http://benalman.com/news/2010/11/immediately-invoked-function-expression/

http://markdalgleish.com/presentations/gettingclosure/

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

javascript - ダブルネームドメソッドは副作用を生み出しますか?

私は最近、次のようにオブジェクトのメソッドを定義するいくつかのライブラリに出くわしました。

誰かが二重命名の使用が何であるかを私に説明できますか? function someName(){};との違いは理解できvar someName = function(){};ますが、この設定はあまり意味がありません。

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

javascript - 名前付きのjavascript関数が持続するのはなぜですか?

これは、john resig の Learning Advanced Javascript アプリにあるものを改造したものです。

エラーがo.x(5)スローされるはずですが、実行されます。なんで?

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

javascript - Firefox での関数式 - 予期しない結果

上記のコードは関数式の例で、Firefox 28 では 1 を返しますが、Chrome では 2 を返します (期待される結果)。firefox が間違った結果を出すのはなぜですか?

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

javascript - 関数内の JavaScript 関数式

以下の実際の JavaScript スニペットには、学習目的でのみ使用されているため、検証は含まれていません。ただし、変数「isBetween」が buildBoundDetector() 関数内で定義された後のイベントの流れを理解していません。変数「f」を介して数値を渡すと機能するのはなぜですか?

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

javascript - JavaScript に格納された名前付き関数式の識別子の不変バインディング レコードはどこにありますか?

最近、名前付き関数式 (NFE) に関する興味深い事実に出くわしました。関数本体内で NFE の関数名にアクセスできることを理解しています。これにより、再帰がより便利になり、節約できarguments.calleeます。また、関数名は関数本体の外では使用できません。例えば、

これは十分に文書化された機能であり、kangax は NFE に関する素晴らしい投稿をしており、そこでこの現象について言及しています。私が最も驚いたのは、NFE の関数名を関数本体の他の値と再関連付けできないことです。例えば、

foo上記の例では、識別子を別の値で再バインドしようとしました5。しかし、これは失敗します!そして、ES5 仕様に目を向けると、NFE の作成時に不変のバインディング レコードが作成され、レキシカル環境の環境レコードに追加されていることがわかりました。

問題は、NFE が関数本体内で独自の関数名を参照するときに、名前が自由変数として解決されることです。上記の例でfooは、 は NFE 内で参照されていますが、この関数の仮パラメーターでもローカル変数でもありません。したがって、これは自由変数であり、そのバインド レコードは NFE の [[scope]] プロパティを通じて解決できます。

したがって、これを考慮してください。外側のスコープに同じ名前の別の識別子がある場合、競合が発生しているようです。例えば、

NFE を実行すると、自由変数 fooは関連付けられている関数に解決されました。しかし、コントロールが NFE コンテキストを終了するfooと、外側のスコープでローカル変数として解決されました。

だから私の質問は次のとおりです。

  1. 関数名の不変バインディング レコードはどこに保存されますか?
  2. fooNFEvar foo = 1内で解決されると、関数名が優先されるのはなぜですか? それらの結合レコードは同じ字句環境に保管されていますか? もしそうなら、どのように?
  3. foo関数名は内部ではアクセスできるが、外部では見えないという現象の背後にあるものは何ですか?

誰かがES5仕様でこれに光を当てることができますか? オンラインでの議論はあまり見当たりません。

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

javascript - 外部の名前で関数式を呼び出す

次のようなJavaScriptの関数式があります。

別の関数からなど、他の場所から呼び出すにはどうすればよいですか。

私はこれを試しました。

そして、次のような他の関数でそれを呼び出しました

また

また

しかし、うまくいきません。どうすればこれを修正できますか?