問題タブ [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 投票する
5 に答える
151586 参照

javascript - javascript関数を再帰的に呼び出す

次のような変数で再帰関数を作成できます。

これで、functionHolder(3);を出力します3 2 1 0。私が次のことをしたとしましょう:

copyFunction(3);上記のように出力3 2 1 0されます。その後、次のように変更functionHolderした場合:

次に、期待どおりに、functionHolder(3);を与えStop counting!ます。

copyFunction(3);これで、関数(それ自体が指す)ではなく、3 Stop counting!参照するとおりになります。functionHolderこれは状況によっては望ましい場合がありますが、関数を保持する変数ではなく、それ自体を呼び出すように関数を作成する方法はありますか?

つまり、電話をかけたときにこれらすべての手順を実行しても得られるように、回線のみを変更することは可能ですか?試しましたが、エラーが発生します。functionHolder(counter-1);3 2 1 0copyFunction(3);this(counter-1);this is not a function

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

javascript - ボタンの onclick ハンドラとして使用する関数式を渡す

ボタンの場合、これが呼び出す関数と、その呼び出しで使用される値を実行時に設定する必要があります。私はこれを次のように行うことができます:

代わりに試してみると:

Firebug は私に

「関数ステートメントには名前が必要です」

とはいえ、私の知る限り、ここでは関数式を使用しています。

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

javascript - Javascript 関数式を使用する好ましい方法は何ですか?

JavaScript 関数式を呼び出すときに、次のようなさまざまなパターンを見てきました。

パターン #1

パターン #2

パターン #3

私のテストでは、すべてが機能しているようです (少なくとも最新のブラウザでは)。私の「好み」では、パターン #3 の方が優れています。これは #1 よりも明示的であり、#2 とは対照的に、実際に呼び出す前に関数を返すためです。

しかし、好ましいものまたはより正しいものがあるかどうか、私はさまよっていました...

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

javascript - JavaScript コードが式かどうかを判断する

次の名前の関数を使用して、isExpressionJavaScript コードが式であるかどうかを判断しています。

1 つを除くすべてのテスト ケースで正しく動作します。誤って a を aFunctionDeclarationとして扱い、代わりにFunctionExpressionを返します。パーサーを書かずにこの問題を解決する方法はありますか?truefalse

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

javascript - すべての関数式が突然関数として認識されなくなった

多くの関数式を含む大量の JavaScript ファイルがあります。突然コンソールに次のエラーが表示されます。

IE で

Firefox の場合

これは私が関数を呼び出す方法です:

これは機能です:

これは、すべての関数式で発生しています。1つを関数宣言に変更すると機能しますが、その中の他の関数式呼び出しで失敗します。一体何?

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

javascript - Javascript: 同じ関数を呼び出す無名関数として変数を定義する

次のような関数が与えられます。

これで、上記の関数に 1 つずつフィードする必要があるオブジェクトの配列 ( RecordArray) ができました。つまり、次に呼び出す前にコールバックするまで待機する必要があります。

だから私は思いついた:

ご覧のとおり、変数自体が定義さWorkFuncれている無名関数内から実際に呼び出されます。これは ECMAScript/Javascript で合法ですか? (標準に準拠したすべてのブラウザで動作するという法的意味)WorkFunc

つまり、私にとっては、 JavascriptC/C++/ObjC/Javaとほとんど同じvar c = c + 1;、定義中に変数を参照しているため、違法である、動作が undefined である必要がありますint c = c + 1;

ただし、一部のブラウザでは問題なく動作するようです。


さらに調査と検討を重ねた結果、別の解決策を思いつきました。

  • 解決策 1: 無名関数 ( MyFunc) に名前を付けて、内部でその名前を使用できるようにします (ここを参照)。

コード:

  • 解決策 2: 関数式の代わりに関数宣言を使用して、(正確ではありませんが) 再帰関数のようにします (ここを参照)。

コード:

  • NextStepFunc解決策 3: 内部を参照する必要がないように、変数をパラメーター ( ) として渡しますWorkFunc(これは非常におかしいようです)。

コード:

しかし、私の質問はまだ残っています: 私の元の解決策は合法でしたか?

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

javascript - 関数宣言または関数式

ブロック スコープで関数を定義するときに問題が発生しました。次のプログラムを検討してください。

私は、このプログラムが警告することを期待していましたMerry Christmas!。ただし、Firefox では次のようになりますReferenceError

Opera と Chrome では、期待どおりに挨拶を警告します。

明らかに Firefox はブロック スコープ内の関数を としてFunctionExpression扱い、Opera と Chrome はそれを として扱いFunctionDeclarationます。

私の質問は、Firefox の動作が異なるのはなぜですか? どちらの実装がより論理的ですか? 規格に準拠しているのはどれですか?

JavaScript の宣言は巻き上げられることを理解しています。そのため、同じ関数が同じスコープ内の 2 つ以上の異なるブロックで宣言されている場合、名前の競合が発生します。

ただし、次のようなことができるように、関数が宣言されるたびに関数を再宣言する方が論理的ではないでしょうか。

これは、上で説明したブロックのスコープの問題を解決することに加えて、非常に役立つと思います。

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

javascript - 厳密モードの関数式内で定義された変数のスコープは何ですか?

私が理解しているように、変数が定義されると、それは。を介して「最も近い」ローカルスコープにアタッチされますthis

ローカルにスコープが設定されていない場合、最も近いスコープはになりwindowます。

ただし、厳密モードでは、グローバルスコープの誤用を制限するように設計されたECMAscript 5仕様の一部としてwindow、ローカルスコープがではなく未定義に設定されます。


jQueryプラグインを作成するための即時呼び出し関数式パターンと厳密モードの使用

ローカルスコープ(コンテキスト)は(関数呼び出しを介して)作成されないため、未定義に設定されます。

ローカルスコープが未定義で未定義の場合window.myVar、変数のスコープは何myVarですか?また、どのようにアクセスしますか?

0 投票する
5 に答える
27890 参照

javascript - 名前付き関数式を使用する理由

JavaScriptで関数式を実行するには、次の2つの方法があります。

名前付き関数式(NFE)

匿名関数式

そして、それらの両方をで呼び出すことができますboo();。匿名関数を使用する理由とタイミング、および名前付き関数式を使用するタイミングが本当にわかりません。それらの間にはどのような違いがありますか?

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

javascript - これはどのように機能していますか !function(){console.log("hi")}()

私はjavascriptの庭のサイトでこれを読みました。誰かがそれがどのように機能するか説明できますか?