[過去ログ] JavaScript の質問用スレッド vol.125 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
497
(1): (オッペケ Sr4f-XOVI [126.34.121.172]) 2023/01/02(月)12:58 ID:A6ceP6kcr(1) AAS
>>474
pythonのeelモジュールを使えば、昔のhtaっぽいことができます
498: (ワッチョイ a779-rE+U [220.150.90.192]) 2023/01/02(月)17:25 ID:V1TEslsJ0(1) AAS
>>497
OSに標準で入ってるedgeで使えるのはいいなあ
情報ありがとう
499: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)19:01 ID:jNmuxM610(1/8) AAS
「無名関数」、「関数リテラル」の理解がちょっとぼやけています。

次の様なコードがあったとき、
let calcResult = function calc(a,b){
return a*b;
}

calc()
と()をつけて表せるものが普通の関数、それを変数に代入したもの
calcResult
が関数リテラルかと思っていました。
しかし、どうやら違うようで。。
500
(1): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)19:01 ID:jNmuxM610(2/8) AAS
例えば以下の2つの関数があります。

■「function関数」を変数に格納
let calcResult1 = function calc(a,b){
return a*b;
}

■「無名関数」を変数に格納
let calcResult2 = function(a,b){
return a*b;
}

「無名関数」は「関数リテラル」と同義である。とさまざまな文献に記述されています。
省6
501
(2): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)19:02 ID:jNmuxM610(3/8) AAS
SetInterval()
に与える引数は、関数リテラルでなくてはならないそうです。

となると、以下は誤りで、
SetInterval(calcResult1,1000);

以下なら問題ない
SetInterval(calcResult2,1000);

という理解でよろしいでしょうか?
502
(3): (ワッチョイ 8701-1zgH [60.103.77.208]) 2023/01/04(水)20:37 ID:UYb7FHhp0(1/3) AAS
外部リンク:developer.mozilla.org

外部リンク:developer.mozilla.org
リテラルに関数は含まれてないな

「関数リテラル=無名関数」が間違ってて、calcResult1 も calcResult2 は、関数リテラル。
とイコールで結んじゃうのは乱暴か
字義に従えば「無名関数」には生成時に名前をつけなかった、程度の意味しかないかと

ただ、関数式として生成された関数は変数に格納するか、でなければ他の関数の引数になるので、名前をつける意味はほぼない
結果的に関数式の関数は無名関数になることがほとんどで
503: (ワッチョイ 8701-1zgH [60.103.77.208]) 2023/01/04(水)20:40 ID:UYb7FHhp0(2/3) AAS
ここでいう「関数リテラル」は関数式で記述された関数のことで、名前があろうとなかろうと「関数リテラル」でいいんだと思う
504
(1): 502 (ワッチョイ 8701-1zgH [60.103.77.208]) 2023/01/04(水)20:53 ID:UYb7FHhp0(3/3) AAS
途中送信で変になってるからまとめ直し

>>500,501
その文脈での「関数リテラル」ってのは関数式で記述された関数のこと(>>502のリンク参照)で、名前の有無は関係ない
名前のあるcalcResult1 も 名前のないcalcResult2 も「関数リテラル」という理解でいいと思う
「無名関数」の「無名」には生成時に名前をつけなかった、程度の意味しかないかと

ただ、関数式として生成された関数は変数に格納するか、でなければ他の関数の引数になるので、名前をつける意味はほぼなくて結果的に無名関数になることがほとんどではある
505: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)20:57 ID:jNmuxM610(4/8) AAS
>>502
すっごい分かりやすい。
モヤモヤしていたのがすっきりしました。
ありがとうございました。
506: (オッペケ Sr4f-JZbg [126.194.244.157]) 2023/01/04(水)21:00 ID:GLj+17iFr(1/4) AAS
調べたら自分を再帰的に呼び出す場合に名前を付けるって例があってなるほどと思った
507
(1): (オッペケ Sr4f-JZbg [126.194.244.157]) 2023/01/04(水)21:21 ID:GLj+17iFr(2/4) AAS
ちなみに>>501のsetIntervalの引数は関数リテラルでないといけないってのはどこ情報?
508: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)21:23 ID:jNmuxM610(5/8) AAS
あれ。関数リテラルには引数はないのか。。引数の不要な関数しか関数リテラルにならんのか。
もちょっと調べてみます。
509
(1): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)21:32 ID:jNmuxM610(6/8) AAS
>>507
必要ならページ画像をどっかにアップします。。

技術評論社
JavaScript本格入門
外部リンク:gihyo.jp
P362
setTimeout/SetIntervalメソッドの注意点
...引数funcは必ず関数リテラルで指定してください。
510: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)21:39 ID:jNmuxM610(7/8) AAS
でも何かの引数に関数をわたすときは、
一般的に関数リテラルで渡すのがデフォと
ぼんやり思っている。
511
(1): (ワッチョイ 8701-9yt5 [60.88.115.90]) 2023/01/04(水)21:47 ID:QxUfEWbZ0(1) AAS
技術評論社はやめとけよ。
512
(1): (オッペケ Sr4f-JZbg [126.194.244.157]) 2023/01/04(水)21:55 ID:GLj+17iFr(3/4) AAS
>>509
文脈がわからんけど理由は書いてあるの?
動く動かないで言えばfunction文で定義した関数リテラルでない関数を渡しても動くようだけど
そもそもMDNにも関数としか書いてないし
513: (ワッチョイ 8201-+uJR [219.204.123.70]) 2023/01/04(水)22:20 ID:lFNs7lW+0(1) AAS
単に著者が良く理解せずに書いてるだけな気がする
514
(2): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)22:21 ID:jNmuxM610(8/8) AAS
>>512
setTimeout()の例でしかもjQueryで
申し訳ないのですが。
1秒後に#displayのhtmlの内容を空にするコードです。

以下のようなコードではsetTimeoutが動かず、

setTimeout($('#display').html(' '), 1000);

代わりに、以下で動きます。

function clearDisplay(){
$('#display').html('');
}
省5
515
(1): (オッペケ Sr4f-JZbg [126.194.244.157]) 2023/01/04(水)22:46 ID:GLj+17iFr(4/4) AAS
>setTimeout($('#display').html(' '), 1000);
これそもそも渡してるの関数じゃないからリテラル云々の問題じゃなくない?
html()が戻り値としてjQueryを返すからそれが引数として渡ってるでしょ

>function clearDisplay(){
> $('#display').html('');
>}
これもfunction「文」で定義してるから>>504で言うところの関数リテラルには当てはまらない関数だよね
516: (ワッチョイ e6cf-/EFQ [153.174.224.39]) 2023/01/04(水)23:53 ID:PU4coe7B0(1) AAS
アロー関数式を使うことで、関数リテラルによる関数定義を
より簡略化して記述することができます
ただし、this には注意してください
1-
あと 486 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.021s