[過去ログ]
JavaScript の質問用スレッド vol.125 (1002レス)
JavaScript の質問用スレッド vol.125 http://mevius.5ch.net/test/read.cgi/tech/1659855460/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
511: デフォルトの名無しさん (ワッチョイ 8701-9yt5 [60.88.115.90]) [] 2023/01/04(水) 21:47:22.56 ID:QxUfEWbZ0 技術評論社はやめとけよ。 http://mevius.5ch.net/test/read.cgi/tech/1659855460/511
512: デフォルトの名無しさん (オッペケ Sr4f-JZbg [126.194.244.157]) [sage] 2023/01/04(水) 21:55:58.51 ID:GLj+17iFr >>509 文脈がわからんけど理由は書いてあるの? 動く動かないで言えばfunction文で定義した関数リテラルでない関数を渡しても動くようだけど そもそもMDNにも関数としか書いてないし http://mevius.5ch.net/test/read.cgi/tech/1659855460/512
513: デフォルトの名無しさん (ワッチョイ 8201-+uJR [219.204.123.70]) [sage] 2023/01/04(水) 22:20:18.03 ID:lFNs7lW+0 単に著者が良く理解せずに書いてるだけな気がする http://mevius.5ch.net/test/read.cgi/tech/1659855460/513
514: デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51]) [] 2023/01/04(水) 22:21:10.60 ID:jNmuxM610 >>512 setTimeout()の例でしかもjQueryで 申し訳ないのですが。 1秒後に#displayのhtmlの内容を空にするコードです。 以下のようなコードではsetTimeoutが動かず、 setTimeout($('#display').html(' '), 1000); 代わりに、以下で動きます。 function clearDisplay(){ $('#display').html(''); } setTimeout(clearDisplay, 1000); このことから書籍にあるように 関数リテラルでないと引数に渡せないと 思っていました。。 書籍の文脈ですが、実際にあとで画像アップします。 http://mevius.5ch.net/test/read.cgi/tech/1659855460/514
515: デフォルトの名無しさん (オッペケ Sr4f-JZbg [126.194.244.157]) [sage] 2023/01/04(水) 22:46:11.56 ID:GLj+17iFr >setTimeout($('#display').html(' '), 1000); これそもそも渡してるの関数じゃないからリテラル云々の問題じゃなくない? html()が戻り値としてjQueryを返すからそれが引数として渡ってるでしょ >function clearDisplay(){ > $('#display').html(''); >} これもfunction「文」で定義してるから>>504で言うところの関数リテラルには当てはまらない関数だよね http://mevius.5ch.net/test/read.cgi/tech/1659855460/515
516: デフォルトの名無しさん (ワッチョイ e6cf-/EFQ [153.174.224.39]) [sage] 2023/01/04(水) 23:53:56.91 ID:PU4coe7B0 アロー関数式を使うことで、関数リテラルによる関数定義を より簡略化して記述することができます ただし、this には注意してください http://mevius.5ch.net/test/read.cgi/tech/1659855460/516
517: デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51]) [sage] 2023/01/05(木) 00:01:25.43 ID:EVXeoiyo0 >>515 setTimeout($('#display').html(' '), 1000); これそもそも渡してるの関数じゃないからリテラル云々の問題じゃなくない? 渡しているのは関数じゃない。。 んー。メソッドか。だから動かない。 ありがとう。 http://mevius.5ch.net/test/read.cgi/tech/1659855460/517
518: デフォルトの名無しさん (オッペケ Sr4f-JZbg [126.194.243.148]) [sage] 2023/01/05(木) 00:18:03.56 ID:7P17JKmwr >>517 いや、関数かメソッドかの話じゃなくて $('#display').html(' ')をその場で実行してその戻り値であるjQueryオブジェクトを渡しちゃってるでしょって話 ちゃんと理解できてる? https://js.studio-kingdom.com/jquery/manipulation/html#1 http://mevius.5ch.net/test/read.cgi/tech/1659855460/518
519: デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51]) [sage] 2023/01/05(木) 00:26:22.30 ID:EVXeoiyo0 私の勘違いだったのですね。 たしかに関数ではない。。 一応書籍のページ画像をuploadしました。 「引数funcは必ず関数リテラルで指定してください。」 https://uploda1.ysklog.net/uploda/8298a4c0da.png 「関数リテラルは....ある関数の引数として渡したり....」 https://uploda1.ysklog.net/uploda/0bcdf35455.png http://mevius.5ch.net/test/read.cgi/tech/1659855460/519
520: デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51]) [sage] 2023/01/05(木) 00:27:48.45 ID:EVXeoiyo0 >>518 理解したありがとう! http://mevius.5ch.net/test/read.cgi/tech/1659855460/520
521: デフォルトの名無しさん (ワッチョイ 2e5c-uhAF [39.3.101.10]) [sage] 2023/01/05(木) 02:04:13.18 ID:hRDnYJsk0 >>519 「引数funcは必ず関数リテラルで指定してください。」 ちょっと問題のある文章だなあ https://developer.mozilla.org/ja/docs/Web/API/setTimeout 第一引数は関数またはjavascriptコードとして実行される文字列 関数ってのは関数呼び出しじゃなくて関数名、または無名関数(関数リテラル) >>514 文字列で渡したら動くはず setTimeout("$('#display').html(' ')", 1000); http://mevius.5ch.net/test/read.cgi/tech/1659855460/521
522: デフォルトの名無しさん (ワッチョイ 8201-+uJR [219.204.123.70]) [sage] 2023/01/05(木) 06:17:33.15 ID:O+NRT3S+0 >>521 > 「引数funcは必ず関数リテラルで指定してください。」 > ちょっと問題のある文章だなあ まあそこは直前に文字列でも指定できるけどって書いてるから教育的指導なんだろうとは思う まあ「必ず」という言葉が強すぎるから「引数funcは関数リテラルで指定するようにしてください。」程度でいいと思う むしろ問題は「関数リテラルは宣言した時点では、名前を持たないことから匿名関数、または無名関数と呼ばれることもあります。」の方だろうね http://mevius.5ch.net/test/read.cgi/tech/1659855460/522
523: デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51]) [sage] 2023/01/05(木) 09:18:58.87 ID:EVXeoiyo0 >>521 >文字列で渡したら動くはず >setTimeout("$('#display').html(' ')", 1000); ありがとう。関数とは、関数呼び出しではなく実行される文字列 次いでもう一点お願いします。 https://uploda1.ysklog.net/uploda/0bcdf35455.png リスト4-04 function_literal.js 以下は、関数リテラルを使ってリスト4-01を書き換えたものです。 var getTraiangle = function(base,height){ return base * height/2; } console.log('三角形の面積:'+getTrianle(5,2)); ↑の getTrianle(5,2) は、関数リテラルなのですね。 てっきり()がないものが関数リテラルと思っていたが、 どうも、それも間違いようで。 http://mevius.5ch.net/test/read.cgi/tech/1659855460/523
524: デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51]) [sage] 2023/01/05(木) 09:20:11.59 ID:EVXeoiyo0 あくまで、関数を変数に代入するということが、重要なのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1659855460/524
525: デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51]) [] 2023/01/05(木) 09:23:08.82 ID:EVXeoiyo0 「関数呼び出し」と 「引数付の関数リテラル」は それだけみても違いわからないですね。 定義された場所を見て判断しないと。 http://mevius.5ch.net/test/read.cgi/tech/1659855460/525
526: デフォルトの名無しさん (オッペケ Sr4f-JZbg [126.194.246.162]) [sage] 2023/01/05(木) 10:06:29.26 ID:rM8SDmmnr >>523 >>setTimeout("$('#display').html(' ')", 1000); >ありがとう。関数とは、関数呼び出しではなく実行される文字列 いやいや、それは関数じゃなくてただの文字列 setTimeoutの第一引数は文字列か関数って書いてあるでしょ 関数リテラルって言葉はもう忘れていいと思うよ そもそもMDNに記述がないから便宜的なものだし、その本での説明も怪しい 定義の仕方で区分されてるだけで実質的にはただの関数で 挙動に差異があるわけでもないだろうし http://mevius.5ch.net/test/read.cgi/tech/1659855460/526
527: デフォルトの名無しさん (オッペケ Sr4f-JZbg [126.194.246.162]) [sage] 2023/01/05(木) 10:52:19.71 ID:rM8SDmmnr >>522 >「引数funcは関数リテラルで指定するようにしてください。」程度でいいと思う それだとfunction命令で定義した関数は指定してはいけないと誤解されるからリテラルを削ったほうがいいかと http://mevius.5ch.net/test/read.cgi/tech/1659855460/527
528: デフォルトの名無しさん (ワッチョイ e6cf-/EFQ [153.174.224.39]) [sage] 2023/01/05(木) 10:52:37.45 ID:uFuuDD5j0 >>523 関数リテラルという呼び方はひとまず置いといて、無名関数という概念でとらえるとよい function(~~){~~} は見ての通り、ひとつの無名関数である var getTraiangle = function(base,height){ return base * height/2; } によって、変数getTraiangle でこの無名関数を参照できるようになる getTraiangle(5,2) では変数名を使って先の無名関数を呼び出し、戻り値が取得される これは一般に「関数の戻り値」と呼ばれる (関数リテラルではない) console.log('三角形の面積:'+getTraiangle(5,2)); では、「+」によって、文字列 '三角形の面積:' と数値である戻り値が連結されて、ひとつの文字列が生成される console.log()がそれを出力する >>525 何かしら(無名)関数を使うにあたり、引数が要るなら付ける、要らないなら付けない、それだけの話 あなたの言う「引数付の関数リテラル」は勘違いで、「引数付きの関数呼び出し」に過ぎない >>524 そういうこと http://mevius.5ch.net/test/read.cgi/tech/1659855460/528
529: デフォルトの名無しさん (ワッチョイ 2e5c-uhAF [39.3.101.10]) [sage] 2023/01/05(木) 11:50:49.92 ID:hRDnYJsk0 >>523 >setTimeout("$('#display').html(' ')", 1000); ありがとう。関数とは、関数呼び出しではなく実行される文字列 違う。全く違う。めっちゃ大事なことだから勘違いしないで それはsetTimeoutoの第一引数を文字列として指定した場合のこと 第一引数に関数を指定する方法は>>514で君は既にやっている setTimeout(clearDisplay, 1000); clearDisplay関数を定義してそれをsetTimeoutの第一引数に渡している これでいい >>527の言う通り >>526の言う通り今は無名関数とか関数リテラルとかにこだわらない方がいい >>523のうp画像に無名関数は重要な概念なので後ほど詳述ってあるからそこをみっちり勉強してね http://mevius.5ch.net/test/read.cgi/tech/1659855460/529
530: デフォルトの名無しさん (オッペケ Sr4f-JZbg [126.194.240.4]) [sage] 2023/01/05(木) 12:50:07.72 ID:w+0CNSMQr 関数リテラルの説明についてはここが一番しっくりくる https://www.javadrive.jp/javascript/function/index5.html 「関数リテラルを使った関数定義」って言い回しを強調してるのが良い だから関数リテラルを引数として渡すって言ったらこういうことだよなって dispNum(10, 8, function(x, y){ return (x + y) / 2; }); http://mevius.5ch.net/test/read.cgi/tech/1659855460/530
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 472 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.008s