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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
712: 2019/05/10(金)00:18 ID:??? AAS
彼は体をはって失笑ネタを提供してくれているのだろう
713: 2019/05/10(金)07:06 ID:??? AAS
煽ってくるからもう相手しちゃだめだよみんな
714
(4): 2019/05/10(金)13:31 ID:??? AAS
document.querySelectorAll('.class').forEach(function(item){
 item.addEventListener('click', function(){
 }, false);
});

window.addEventListener('click', function(evt){
 if (evt.target.className == 'class') {
 }
}, false);

itemがいっぱいあるときはどっちがいいですか?
715
(1): 2019/05/10(金)13:47 ID:??? AAS
要素を取得して、その要素の値を使ってあれこれしたいってとき結構多いじゃないですか
なのでquerySelectorAllで取得してループさせてっていうのをやるわけですが
querySelectorAll().forEachがどうみても便利なのにforEachは使っちゃダメみたいな雰囲気なのですが
何か理由があるんですか??
716: 2019/05/10(金)13:57 ID:??? AAS
forEach使っちゃダメってどんな文脈で言われたの?
717
(2): 2019/05/10(金)14:16 ID:??? AAS
>>714
下は class="class foo bar" とか書いてある時に
動かないので同等のコードになっていない
718
(3): 2019/05/10(金)14:16 ID:??? AAS
>>715
querySelectorAll() に forEach が必ずあるとは限らない
719: 2019/05/10(金)14:17 ID:??? AAS
>>714
itemが後から増えるかどうかにもよる
どっちがいいかは、速度とメンテナンス性、何を重視するかによる
720: 2019/05/10(金)14:20 ID:??? AAS
>>714

$('.class').on('click', function() {
});

$(document).on('click', '.class', function() {
});

itemがいっぱいあるときは後者が速度とメモリ効率が良い
itemが増減する時は後者がメンテナンス性が良い
後者は少しタイプ数が多い。その程度。
一般的には後者がいい

jQueryを使わない場合は知らん
721: 2019/05/10(金)15:42 ID:??? AAS
filter関数について
function isBigEnough(value) {
return value >= 10;
}

var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
というコードがあるとき(上記はMDNのサンプルコードです)
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);の行を
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough());としたらエラーが出てしまいました
関数を呼び出す時は 関数名() で呼び出すのではないのですか?
722
(1): 2019/05/10(金)15:51 ID:??? AAS
()を付けると即実行されて、その戻り値がfilterに渡されるからエラーになる
関数を渡すには関数名だけで
723: 2019/05/10(金)16:15 ID:??? AAS
実際はしらんが>>714の上はプロセスがいっぱい起動してるようなイメージがある
リソース的にはちょっとなあという感じ

>>717の指摘通り複数classを適用してると
判定部分が複雑になって毎回クリックのたびにそこを通ると思うと
ちょっとなあという感じ

まあどちらにしても問題になるような次元じゃないと思うけどね
724
(1): 2019/05/10(金)18:45 ID:??? AAS
>>718
PolyfillでOK
725
(2): 2019/05/10(金)18:48 ID:??? AAS
>722
ありがとうございます
重ねて質問すみません
>()を付けると即実行されて、
というのはどういうことでしょうか?

>filter() は、与えられた callback 関数を配列の各要素に対して一度ずつ呼び出し、
>callback が真と評価される値を返したすべての要素からなる新しい配列を生成します。(MDNから)
isBigEnough() と、()を付けると
filter()がcallback関数を呼び出す前に実行されてしまうんですか?

ググっていて下記サイトを見つけたのですが、その中で
省8
726: 2019/05/10(金)18:49 ID:??? AAS
>>717
classListに変更すれば良い
727: 2019/05/10(金)18:55 ID:??? AAS
>>725
()を付ければ、呼び出される
外部リンク:developer.mozilla.org
728: 2019/05/10(金)19:13 ID:??? AAS
>>718
そんなん[...querySelectorAll()].forEachでええやろ
729: 2019/05/10(金)19:14 ID:??? AAS
まちがえた[...document.querySelectorAll()].forEachだった
730: 2019/05/10(金)19:36 ID:??? AAS
>>725
> たぶん、コールバック関数が何なのか解っていないんだと思います

少なくともJavascriptにおいては、ただの関数です。
var tadanokansuu = function() {
console.log('hello, world!');
};
ただの関数を呼び出すとき、以下のように()つけて呼び出しますね?
tadanokansuu();
//=> hello, world!
一方、世の中には以下のような、引数として関数を取る関数があります。
省8
731
(1): 2019/05/10(金)20:02 ID:??? AAS
>>718の話自分にはよくわからないのですがどういうことですか?
見つからなかったら空の配列をまわそうとしてなんかエラーが出たりするってことですか?
1-
あと 271 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.013s