+ JavaScript の質問用スレッド vol.133 +

■ このスレッドは過去ログ倉庫に格納されています
2018/04/16(月) 00:09:43.45ID:???
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください

■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。

■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)

■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/

■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
2018/04/23(月) 11:00:55.36ID:???
使われなくなったことをどうやって検知するんですか?

イベントリスナが貼り付けられた要素が削除されればブラウザが勝手に開放してくれんじゃないか
2018/04/23(月) 12:54:47.97ID:???
いやそういう意味ではなく、
ソースコードの中に、もはや使われなくなったイベントリスナ追加処理のコードが残るということです
呼ばれないイベントリスナは特に問題を起こさないので、見つけるタイミングが少ないです
2018/04/23(月) 13:26:24.03ID:???
どういう意味だよ日本語が不自由すぎる
2018/04/23(月) 13:57:41.12ID:???
は?
ここまで書いて分からないということは、多分あなたには分からないのでしょうね
2018/04/23(月) 17:11:34.45ID:???
俺も意味分からんからスルーしてたw
2018/04/23(月) 17:30:05.01ID:???
コードの変更改修によって
もう使われなくなった「リスナに呼んでもらう関数」を
掃除したい

という意図にピザまん3個
2018/04/23(月) 18:07:14.70ID:???
つ grep
2018/04/23(月) 23:56:59.95ID:???
意味が分からんな
オブジェクトにもう使われなくなったプロパティが残ってるからそれを削除したい
と同じようなニュアンスか?
2018/04/24(火) 09:14:58.58ID:???
用済みになったコードを削除したいんじゃない?
次のように

{
let func = function(event){
…何かやる…
func = null;
}

element.onclick = func
}
2018/04/24(火) 09:28:46.12ID:???
「イベントリスナ追加処理のコード」だからなあ
やっぱり意味不明
2018/04/24(火) 09:28:46.27ID:???
必要なのか、不要なのかは人間様が判断しないとダメです
JavaScriptに人工知能は実装されていません
2018/04/24(火) 09:29:38.36ID:???
この流れ、もしかして一休さんかな
2018/04/24(火) 11:18:09.84ID:???
>>134
ワロタwそういやそうだな
2018/04/24(火) 23:38:54.58ID:???
型情報って物理的にはどういう風に保持されてるの?
2018/04/25(水) 03:53:37.54ID:???
物理的にメモリをですね
140Name_Not_Found
垢版 |
2018/04/25(水) 22:33:55.34ID:hTMdu4KG
>>28お願いします

非アクティブになってるタブをアクティブにしたいです。
非アクテヒブになるとジャバスクリプトも停止するので無理なのでしょうか?
2018/04/25(水) 23:58:24.98ID:???
テルアビブ
ひでぶ
2018/04/26(木) 00:12:45.00ID:???
なにがしたいのかよくわからない
ブラウザのタブをアクティブにしたいの?
だとしたらコンテンツからでは無理だよ
2018/04/26(木) 00:44:57.34ID:???
配列のreduceメソッドが何も減らないのになぜreduceなんて名前になってるかわからなくてイライラするので
理由を教えて下さい
2018/04/26(木) 01:02:32.10ID:???
>>143
reduceを一般的な使い方で使ってないのだろう


ここにも書いているが
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

reduceは配列(複数の値)をどんどん消費していって
最終的に一つの値にするからreduceなんだよ
2018/04/26(木) 01:44:47.41ID:???
>>144
蓄積変数ある以外forEach とかわらんやん
使った配列の中身が減っていくならまだ分かるけど減らんし
forEachWithAccumlatorVersionSpecialArrayMethodって名前にすべき
reduceなんておかしいわ
2018/04/26(木) 01:46:38.21ID:???
関数型にforなんてものはありませんよ?
2018/04/26(木) 01:47:57.22ID:???
>>142
例えば指定した時間になるとタブをアクティブにするとかです
2018/04/26(木) 05:52:06.81ID:???
>>146
?
149Name_Not_Found
垢版 |
2018/04/26(木) 07:53:27.15ID:0TDqn0Ks
>>143
(整理して)変える
https://ejje.weblio.jp/content/reduce
2018/04/26(木) 13:16:29.47ID:???
map
射影。1対1

reduce
蓄積変数・accumulator に畳み込む。多対1
SQL のgroup by
2018/04/26(木) 13:50:57.93ID:???
>>149
なるほど。
勉強なった。
2018/04/26(木) 21:23:45.17ID:???
>>122-123
なるほど
HTML5APIに便利なのがどんどん追加されてるみたいですね
dialog要素とかUI系ライブラリが対応すればまさに、という感じでした
ありがとうございました
2018/04/27(金) 13:14:02.46ID:???
null と undefinedの違いと使い分け方をおしえて
2018/04/27(金) 14:44:46.29ID:???
基本undefinedは自分で使うな
2018/04/27(金) 16:01:01.79ID:???
lodashのdebounceを使う時は

const f = _.debounce(()=>{
console.log('debounce');
},1000);

function hoge(){
f();
}

hoge();
hoge();

のように呼び出す関数の外で定義しておかないと、
前回のキャンセルが出来ませんが
呼び出す関数の中でdebounceを定義する方法はありますか?
2018/04/27(金) 16:35:33.80ID:???
画面遷移のあるSPAはフレームワークを使った方がシンプルに作れると思いますが
一番シンプルなSPA用JavaScriptフレームワークは何ですか?
2018/04/27(金) 17:36:44.71ID:???
SPAは意識高い系の営業がよく使いたがるな
それだけ
2018/04/27(金) 19:24:30.41ID:???
アプリがSPAになるのはごく当然のことだと思いますが・・
2018/04/27(金) 20:08:32.39ID:???
開発がものっそい面倒になるけどメリットが見合わない印象

画面内の一部の要素をajaxで動的に変更するだけで十分で、複数ページ分の機能を丸ごとjsで面倒見るメリットがない
みたいな状態でほんとにSPA必要なんか?ってのが多いというか
2018/04/27(金) 20:40:13.55ID:???
一番普及してるものが一番シンプルやろ
面倒くさいのは普及しない
つまりReact
2018/04/27(金) 20:42:38.61ID:???
SPAって何のことかとおもってググったけど雑誌のことか。
すれち。
2018/04/27(金) 20:54:27.67ID:???
>>155
何をしたいのかさっぱり分からん。
どうせやりたいことはこれだけだろ?

const hoge = _.debounce(()=>console.log('debounce'), 1000);

hoge();
hoge();
2018/04/27(金) 20:56:23.36ID:???
>>159
SPAは、ウェブアプリ、例えばGmailやGoogle Mapのようなものには必要
ウェブサイトには必要ない。jQueryで十分
2018/04/27(金) 21:07:56.21ID:???
実際に使っているかどうかと必要かどうかは別だろう
2018/04/27(金) 21:09:31.76ID:???
訂正

SPAは、ウェブアプリ、例えばGmailやGoogle Mapのようなものには必要かもしれない
ウェブサイトには必要ない。jQueryで十分
2018/04/27(金) 21:10:14.58ID:???
SPAはウェブアプリには必要かもしれないが
実際には殆ど使われていない
2018/04/27(金) 21:26:15.72ID:???
要するに金を搾り取るための道具・査定を低くするための道具としては優秀
2018/04/27(金) 21:47:26.10ID:???
自分が出来る・分かる→必要!重要!
自分が出来ない・分からない→不要![自分が知ってるもの]で十分!
なんて言うんだっけこういうの?
2018/04/27(金) 21:50:42.00ID:???
防衛機制の合理化だね。
酸っぱいブドウはその一例。
また英語圏では「Sour Grapes」は「負け惜しみ」を意味する熟語でもある。

手に入れたくてたまらないのに、人・物・地位・階級など、努力しても手が届かない対象がある場合、その対象を「価値がない・低級で自分にふさわしくない」ものとみてあきらめ、心の平安を得る。
2018/04/27(金) 21:55:29.34ID:???
と他人事のようにいうことで、心の平安を得る
2018/04/27(金) 22:02:39.21ID:???
loadashとかしらん超初心者だけど挑戦という体で

var func1 = () => {
console.log('debouce1')
}
var func2 = () => {
console.log('debouce2')
}
const f = (func) => {
return _.debounce( ()=>{
return func()
}, 1000)

var hoge = (fun) => {
f(fun);
}

hoge(func1);
hoge(func2);
2018/04/27(金) 22:09:35.70ID:???
const hoge = (function() {
 const f = _.debounce(()=>console.log('debounce'),1000);
 return function() {
  f();
 }
)();

hoge();
hoge();
2018/04/27(金) 23:54:54.66ID:???
>>162
いや、例を合理化されても困るんですが。
知りたいのは呼び出す関数の中でdebounceを定義する方法はあるかどうかです
全部debounceでくるめるのなら最初からそうしてます
2018/04/28(土) 00:41:00.47ID:???
簡単なSPA なら、jQuery Mobile, Vue.js

Angular, React, Electron などは、複雑
2018/04/28(土) 01:50:40.01ID:???
>>173
よくわからんけど
addEventListenerに対するremoveEventListenerを考えたらいいんじゃないかな
2018/04/28(土) 02:11:36.03ID:???
結局、SPAとは1pのフロントで全部やる利点が欠点よりも明らかに大きいんですか?


「1pにできてファイル数少なくなるから管理が楽」
なんて抜かした阿呆は知ってるけど
2018/04/28(土) 02:31:47.46ID:???
ファイルは逆に多くなるだろうなw
2018/04/28(土) 02:48:12.61ID:???
(フロントに)一極集中させたがったり
ファイル数を少なくしたがる層が一定数いるけど、なんでなのかね
2018/04/28(土) 10:45:21.43ID:???
デプロイは楽だな
2018/04/28(土) 10:50:18.65ID:???
自動化するんだから数ではなにも変わらないと思うが?
2018/04/28(土) 10:58:27.81ID:???
難しいからspaクソ言うてる勢が自動デプロイ環境なんて整えるわけないよね。
いまだにftpでポチポチやってるに1票ww
2018/04/28(土) 11:12:49.88ID:???
ん? SPAって最終的に1ページになるだけで
ソースコードは普通に複数のファイルになるぞ

そしてビルド環境必須だから当然整えてるし、
それができる人ならデプロイ環境も整えられる
2018/04/28(土) 11:18:14.92ID:???
index.htmlとbundle.jsの2ファイルになるわ
2018/04/28(土) 11:26:13.26ID:???
SPAって別にビルド環境必須ではないぞ
別にサイトのうち多くのデータを1つのページで扱わないといけないこともないし
例えば2ページ間の遷移をajaxで行えばそのページはSPAと言える

もうちょっとSPAっぽくしたければ、
Nodeのようなアプリケーションサーバとpjax使えば非常に簡単に作れる
2018/04/28(土) 11:28:56.98ID:???
何度も検索するようなページではSPAにすれば通信が減る
とか書いてるサイトがクソほどあって失笑
お前検索をクライアントサイドに閉じ込められると思ってんのか
検索結果部分だけ動的に更新させりゃ済むだろが
2018/04/28(土) 12:28:48.67ID:???
> 検索結果部分だけ動的に更新させりゃ済むだろが

それ検索結果の表示ページに遷移しないんだからアプリかどうかは知らんがシングルページじゃん

> お前検索をクライアントサイドに閉じ込められると思ってんのか

クライアントサイドに閉じ込められるかどうかはspaうんぬんと関係ないぞ。
クライアントサイドをどう作るかであって、サーバサイドと連携するしないやどうやるかは別の話で関係ない。
2018/04/28(土) 12:47:29.15ID:???
>>186
アホ丸出しか
通信が減るかどうかの問題だぞ
クライアントで完結するか?しないだろ、どうやってもxhrが挟まるだろ
2018/04/28(土) 12:48:46.96ID:???
ajaxっていつからSPAって名前に変わったんですかねえ…
2018/04/28(土) 12:54:10.63ID:???
SPAなんて単なる概念でしょ
ムキになりすぎ
2018/04/28(土) 13:59:36.52ID:???
ぶっちゃけ提唱されたけどほとんど馴染まないまま消え去っていってる最中だからな
2018/04/28(土) 16:48:58.11ID:???
>>188
ajaxとSPAは別物ですよ
外部との通信を必要としないSPAもありますし
2018/04/28(土) 16:53:28.57ID:???
let a = function hoge(){
console.log(hoge);
}

a();

このような形で関数内から自分自身を参照出来ますが
関数外部からhoge();
としたらエラーになります
この関数名は、関数内からしか参照できないのでしょうか?
だとしたら関数にstatic変数を持たせるのに都合がいいですが、
関数名を使ってstatic変数を持たせる方法はアリなのでしょうか?
2018/04/28(土) 18:36:40.24ID:???
何がしたいか知らんけどクロージャ

var f = (n) => {
var count =n
return ()=> {
return ++count;
}
}

var f1 = f(1);
var f100 = f(100);

f1() //2
f100() //101
f1() //3
f100() //101
2018/04/28(土) 18:43:04.99ID:???
>>172のパクリ?
2018/04/28(土) 19:06:05.21ID:???
アンカくらいつけろよ無能
2018/04/28(土) 19:34:59.86ID:???
あんか(行火)は炭火、電気ヒーター、化学発熱体等を内蔵した
一人用可搬型の採暖用保温具。 布団などに入れ直接手足に当てて
暖をとる暖房器具である。 地域や世代によっては
「こたつ」「足炬燵」と呼ばれることもある。
2018/04/28(土) 19:45:59.98ID:???
はいはいおもしろいおもしろい
2018/04/28(土) 20:15:25.53ID:???

199Name_Not_Found
垢版 |
2018/04/28(土) 20:24:14.55ID:npVPEEtd
>>192
関数内からしかアクセスできない
有り無しは個人の判断、自分で判断しろ
2018/04/28(土) 20:32:01.16ID:???
>>193
いえクロージャは知ってます

>>199
じゃあアリにします
ありがとうございました
2018/04/28(土) 20:35:30.10ID:???
>>192
なしだろこんなの
意味不明
2018/04/28(土) 20:38:10.17ID:???

2018/04/28(土) 20:59:34.26ID:???
他人がどういうコード書こうと批判する気は無いけど

>だとしたら関数にstatic変数を持たせるのに都合がいいですが

これはちょっとわからない
204Name_Not_Found
垢版 |
2018/04/28(土) 21:24:58.02ID:npVPEEtd
>>203
hoge.foo = 1; とか、したいんじゃない?
a.foo = 1; でも出来るから意味不明だけど
2018/04/28(土) 21:52:42.23ID:???
>>204
この場合の自関数名は読み取り専用
自前でhoge.foo = 1; できるから、ではなくて
「関数にstatic変数を持たせる」という目的に、この場合の自関数名が関係しない
なので意味がわからない
206Name_Not_Found
垢版 |
2018/04/28(土) 22:19:46.07ID:npVPEEtd
>>205
正直に言うと、後段の部分は俺も理解してなくて、質問者本人が判断すれば良いから投げた
突っ込みどころを出せば、キリがない

- 関数名の参照はスコープからの参照だよな?Function#nameは外のスコープからも参照可能だが、関係ないよな?
- そもそも、static変数はクラスのためのものだが、どういう用途を想定してるんだ?
- つか、JavaScriptにstatic変数はないが、Java定義の認識でいいのか?
- sratic変数は外のスコープから参照可能だが、スコープ上で関数への参照が閉じ込められる性質とどう組み合わせるんだ?
2018/04/28(土) 22:27:36.73ID:???
自分はCのstaticの意だと解釈した
2018/04/28(土) 22:37:23.05ID:???
>sratic変数は外のスコープから参照可能だが

typoは無視するとして、>>192もそうだがprivateとごっちゃになっている気がする
staticはstatic
2018/04/28(土) 22:44:14.05ID:???
妄想に論理性を求めるのは無駄というもの
2018/04/28(土) 22:52:41.12ID:???
ふぅ、こんなピリピリした話をしてるなら
いつものようにjQueryの話題で盛り上がっていたほうが良いな
2018/04/28(土) 22:59:25.11ID:???
俺はSPAの実際のところが気になる

できるかどうか、難易、フレームワーク云々、以前にSPA必須な案件にまったく遭遇しない
2018/04/28(土) 23:06:03.45ID:???
普通のサイトがSPA取り入れても
違和感が出るだけだしな。

クリックしたらページが変わるだろう所で変わらないから
違う、そうじゃないって思っちゃう
2018/04/28(土) 23:23:14.82ID:???
そんなもんトランジションアニメーションさせればいいだけの話。
アドレスバーのurlも自由自在よ。
2018/04/29(日) 00:13:40.97ID:???
そこまでしてSPAにこだわるメリットがない
2018/04/29(日) 00:29:00.58ID:???
>>192
あたまよさそうだねきみ
後学のためにどういう風に使うのか具体的な事例とコードよろしく
2018/04/29(日) 12:00:52.31ID:???
>>208
そんなわけないでしょう
privateの意味分かってますか?
2018/04/29(日) 12:50:16.42ID:???
>>215
$(document).on('click', '#hoge', function f(e) {
if (!f.fadeout) {
f.fadeout = _.debounce(() => {
$('#moge').fadeOut();
}, 10000);
}
// いろいろな処理
f.fadeout();
});

こんな感じに、関数の中から同一オブジェクトにアクセスしたい場合に使います
fadeout開始するまでの待ち時間に再び呼び出された時には
前回のfadeout予約がキャンセルされるような関数を、lodashのdebounceで作っています
jqueryのdelayとstopで同じことをしようとしたのですが何故かうまくいかなかったので。
これが唯一の実装方法でないのは当然ですが、複雑さを関数の中だけに閉じ込めるのがシンプルで好みです
もっといい方法ありますか?
2018/04/29(日) 13:30:10.24ID:???
>>192で言ってることをどこでつかっとんそれ?
2018/04/29(日) 14:54:33.07ID:???
イベントは、発行/購読パターンが基本

Mediator もある。
仲介者、まとめ役、橋渡し役、管制塔

イベントキャンセルできるイベントキューのライブラリは、
オライリーの著者などの、外人が作っている

自分で作ったら、複雑すぎて大変

Stoyan Stefanov 著
JavaScriptパターン ―優れたアプリケーションのための作法、2011
オブジェクト指向JavaScript、2012

JavaScriptデザインパターン、Addy Osmani, 2013
2018/04/29(日) 17:08:55.60ID:???
setTimeoutの戻り値を自関数の中で管理するだけで済むように見えるんだが、こういう挙動が欲しいのではないのか?

document.getElementById('mybutton').addEventListener( 'click', function f(){
  var delay = 3000;
  if( ( 'timeoutId' in f ) === false )
    f.timeoutId = false;
  if( f.timeoutId !== false )
    clearTimeout(f.timeoutId);
  f.timeoutId = setTimeout( function(){
    f.timeoutId = false;

    /* my oparation */

  }, delay );
}, false );

目印は別にfalseでなくてもいいが
2018/04/29(日) 17:13:42.83ID:???
>>218
何を言っているのか分かりません
2018/04/29(日) 17:15:23.82ID:???
>>221
関数「名」は、予約&予約キャンセルの仕組みには、一切関係ないではないか
ということだと思うが
2018/04/29(日) 17:15:50.11ID:???
>>220
setTimeoutの返り値でキャンセルするっていうのは当たり前の話です
わざわざ複雑にした処理をドヤ顔で書ける神経が分かりません
2018/04/29(日) 17:16:45.71ID:???
>>223
目的の挙動はこれで合っているのか間違っているのか、だけが欲しい
2018/04/29(日) 17:17:08.29ID:???
>>222
いや、だから何????
そんな話誰してないだろ???
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況