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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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 には注意してください
517
(1): (ワッチョイ 8202-9yt5 [27.92.176.51]) 2023/01/05(木)00:01 ID:EVXeoiyo0(1/10) AAS
>>515
setTimeout($('#display').html(' '), 1000);
これそもそも渡してるの関数じゃないからリテラル云々の問題じゃなくない?

渡しているのは関数じゃない。。
んー。メソッドか。だから動かない。

ありがとう。
518
(1): (オッペケ Sr4f-JZbg [126.194.243.148]) 2023/01/05(木)00:18 ID:7P17JKmwr(1) AAS
>>517
いや、関数かメソッドかの話じゃなくて
$('#display').html(' ')をその場で実行してその戻り値であるjQueryオブジェクトを渡しちゃってるでしょって話
ちゃんと理解できてる?
外部リンク:js.studio-kingdom.com
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
理解したありがとう!
521
(2): (ワッチョイ 2e5c-uhAF [39.3.101.10]) 2023/01/05(木)02:04 ID:hRDnYJsk0(1/2) AAS
>>519
「引数funcは必ず関数リテラルで指定してください。」
ちょっと問題のある文章だなあ

外部リンク:developer.mozilla.org
第一引数は関数またはjavascriptコードとして実行される文字列

関数ってのは関数呼び出しじゃなくて関数名、または無名関数(関数リテラル)

>>514
文字列で渡したら動くはず
setTimeout("$('#display').html(' ')", 1000);
522
(1): (ワッチョイ 8201-+uJR [219.204.123.70]) 2023/01/05(木)06:17 ID:O+NRT3S+0(1/3) AAS
>>521
> 「引数funcは必ず関数リテラルで指定してください。」
> ちょっと問題のある文章だなあ
まあそこは直前に文字列でも指定できるけどって書いてるから教育的指導なんだろうとは思う
まあ「必ず」という言葉が強すぎるから「引数funcは関数リテラルで指定するようにしてください。」程度でいいと思う
むしろ問題は「関数リテラルは宣言した時点では、名前を持たないことから匿名関数、または無名関数と呼ばれることもあります。」の方だろうね
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
「関数呼び出し」と
「引数付の関数リテラル」は
それだけみても違いわからないですね。
定義された場所を見て判断しないと。
526
(1): (オッペケ Sr4f-JZbg [126.194.246.162]) 2023/01/05(木)10:06 ID:rM8SDmmnr(1/2) AAS
>>523
>>setTimeout("$('#display').html(' ')", 1000);
>ありがとう。関数とは、関数呼び出しではなく実行される文字列
いやいや、それは関数じゃなくてただの文字列
setTimeoutの第一引数は文字列か関数って書いてあるでしょ

関数リテラルって言葉はもう忘れていいと思うよ
そもそもMDNに記述がないから便宜的なものだし、その本での説明も怪しい
定義の仕方で区分されてるだけで実質的にはただの関数で
挙動に差異があるわけでもないだろうし
527
(1): (オッペケ Sr4f-JZbg [126.194.246.162]) 2023/01/05(木)10:52 ID:rM8SDmmnr(2/2) AAS
>>522
>「引数funcは関数リテラルで指定するようにしてください。」程度でいいと思う
それだとfunction命令で定義した関数は指定してはいけないと誤解されるからリテラルを削ったほうがいいかと
528: (ワッチョイ e6cf-/EFQ [153.174.224.39]) 2023/01/05(木)10:52 ID:uFuuDD5j0(1) AAS
>>523
関数リテラルという呼び方はひとまず置いといて、無名関数という概念でとらえるとよい
function(~~){~~} は見ての通り、ひとつの無名関数である

var getTraiangle = function(base,height){ return base * height/2; }
によって、変数getTraiangle でこの無名関数を参照できるようになる

getTraiangle(5,2)
では変数名を使って先の無名関数を呼び出し、戻り値が取得される
これは一般に「関数の戻り値」と呼ばれる (関数リテラルではない)

console.log('三角形の面積:'+getTraiangle(5,2));
では、「+」によって、文字列 '三角形の面積:' と数値である戻り値が連結されて、ひとつの文字列が生成される
省6
529: (ワッチョイ 2e5c-uhAF [39.3.101.10]) 2023/01/05(木)11:50 ID:hRDnYJsk0(2/2) AAS
>>523
>setTimeout("$('#display').html(' ')", 1000);
ありがとう。関数とは、関数呼び出しではなく実行される文字列

違う。全く違う。めっちゃ大事なことだから勘違いしないで
それはsetTimeoutoの第一引数を文字列として指定した場合のこと

第一引数に関数を指定する方法は>>514で君は既にやっている
setTimeout(clearDisplay, 1000);
clearDisplay関数を定義してそれをsetTimeoutの第一引数に渡している
これでいい
>>527の言う通り
省2
530: (オッペケ Sr4f-JZbg [126.194.240.4]) 2023/01/05(木)12:50 ID:w+0CNSMQr(1) AAS
関数リテラルの説明についてはここが一番しっくりくる
外部リンク[html]:www.javadrive.jp

「関数リテラルを使った関数定義」って言い回しを強調してるのが良い
だから関数リテラルを引数として渡すって言ったらこういうことだよなって
dispNum(10, 8, function(x, y){
return (x + y) / 2;
});
1-
あと 472 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.018s