[過去ログ] JavaScript の質問用スレッド vol.125 (1002レス)
上下前次1-新
抽出解除 レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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);
という理解でよろしいでしょうか?
505: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/04(水)20:57 ID:jNmuxM610(4/8) AAS
>>502
すっごい分かりやすい。
モヤモヤしていたのがすっきりしました。
ありがとうございました。
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
でも何かの引数に関数をわたすときは、
一般的に関数リテラルで渡すのがデフォと
ぼんやり思っている。
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
517(1): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)00:01 ID:EVXeoiyo0(1/10) AAS
>>515
setTimeout($('#display').html(' '), 1000);
これそもそも渡してるの関数じゃないからリテラル云々の問題じゃなくない?
渡しているのは関数じゃない。。
んー。メソッドか。だから動かない。
ありがとう。
519(1): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)00:26 ID:EVXeoiyo0(2/10) AAS
私の勘違いだったのですね。
たしかに関数ではない。。
一応書籍のページ画像をuploadしました。
「引数funcは必ず関数リテラルで指定してください。」
画像リンク[png]:uploda1.ysklog.net
「関数リテラルは....ある関数の引数として渡したり....」
画像リンク[png]:uploda1.ysklog.net
520: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)00:27 ID:EVXeoiyo0(3/10) AAS
>>518
理解したありがとう!
523(3): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)09:18 ID:EVXeoiyo0(4/10) AAS
>>521
>文字列で渡したら動くはず
>setTimeout("$('#display').html(' ')", 1000);
ありがとう。関数とは、関数呼び出しではなく実行される文字列
次いでもう一点お願いします。
画像リンク[png]:uploda1.ysklog.net
リスト4-04 function_literal.js
以下は、関数リテラルを使ってリスト4-01を書き換えたものです。
var getTraiangle = function(base,height){
return base * height/2;
省7
524(1): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)09:20 ID:EVXeoiyo0(5/10) AAS
あくまで、関数を変数に代入するということが、重要なのでしょうか?
525(1): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)09:23 ID:EVXeoiyo0(6/10) AAS
「関数呼び出し」と
「引数付の関数リテラル」は
それだけみても違いわからないですね。
定義された場所を見て判断しないと。
531(6): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)14:46 ID:EVXeoiyo0(7/10) AAS
すいません。やっぱり関数リテラルという意味を理解したい。。でも↓この質問でわかるかも。
だれか答えていただけますでしょうか?
---
次のコードがあります。1から5のうち
どれが適切でしょうか?
let dispMessage = function(msg){
console.log(msg);
};
1.
function(msg){console.log(msg);}
省14
533: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)15:02 ID:EVXeoiyo0(8/10) AAS
うん。「リテラル」ということばによって惑わされてきた気がする。
538: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)15:38 ID:EVXeoiyo0(9/10) AAS
あ。
誤解していたところがとけました。
当初は「2」かと妄信していたので、
だいぶ合点がとれました。
関数リテラルが無名関数と同義という説明も
いやそうではないという説明も
すっきりしました。
皆さん長々とお付き合いいただき
ありがとうございました。
540: (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)20:02 ID:EVXeoiyo0(10/10) AAS
>>534
>関数リテラルは関数として評価可能な右辺値と考えておけばまあいいんじゃない
この発想というか常識が無かったなあ。
557: 538 (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/06(金)17:52 ID:AgA2i3Ln0(1) AAS
リテラルって文字列とか数値というイメージ
だから、
let dispMessage = function(msg){console.log(msg)}
っていう文があれば、関数リテラルならどうみても
左側の変数の文字列の事って思うじゃないですか。
右側はfunctionとか{}とか()とかあるので、
リテラルからかけ離れていると思ってました。
どうりで、話が噛み合わないなと思ってたが
今、全部なっとく。ありがとうございました!
643(2): (ワッチョイ 9202-AGaU [27.92.176.51]) 2023/02/17(金)12:17 ID:DJukcnvm0(1) AAS
$.each()とsetIntervalをつかって、
インターバル時間ごとに順番に配列の中身を、コンソール出力する方法ありますでしょうか?
$.each()は、一度に処理するから、一つづつコンソール出力するのは難しいですかね。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.037s