のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,491,119人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    401 : Name_Not - 2021/02/18(木) 17:48:04.73 ID:???.net (+3,+10,+0)
    ありがとうございます!
    402 : Name_Not - 2021/02/18(木) 19:59:44.49 ID:???.net (+32,+29,-37)
    >>399
    型もポインタも明示的に指定しない分余計に意識が必要
    コードに書かないということは自分の頭で分かってないといけないから
    JSで学べないことはないよ♡
    403 : Name_Not - 2021/02/18(木) 20:24:49.74 ID:???.net (-5,-9,-54)
    >>394
    WebKitは旧世代だよ
    Googleの開発スピードにAppleは追いつけない
    ウェブは高速で進化してる、その中でAppleは置いてきぼり
    404 : Name_Not - 2021/02/18(木) 20:54:59.84 ID:???.net (+24,+29,-33)
    >>403
    どの辺が旧世代なのかは説明できないんでしょ?
    だからお前はダメなんだよ
    405 : Name_Not - 2021/02/18(木) 21:21:10.26 ID:???.net (-22,-29,-70)
    >>399
    型に関係する部分くらいだね
    静的型付け/型チェック、クラスベースのオブジェクト指向、インターフェース、
    関数の型、メソッドオーバーロード、Enum, ジェネリクス、代数型、Null Safetyなど

    あと強いて言えばマクロ、メタプログラミング、マルチスレッド辺り
    406 : Name_Not - 2021/02/18(木) 21:37:29.04 ID:???.net (+36,+30,-186)
    >>398
    世界平均ではごく少数だけど
    日本、北朝鮮、アフリカ諸国、東欧、南米とかに
    偏って存在してる

    日本以外ははふっるい中古PCが多いせい

    日本は00年代の早くから
    IEをフロントエンドとする企業向けWebシステムを
    企業毎に高いお金かけてオリジナルで導入した
    っていう、当時としては先進的な動向が原因

    フロントエンド開発者はずっと
    IEはクソだから見捨てようって言い続けてきたけど
    SIerも広告代理店もそれを客に進言できなかったし
    企業のシステム担当もChromeのインストールを認められなかった

    そして今に至る
    407 : Name_Not - 2021/02/19(金) 05:28:33.36 ID:???.net (-17,-30,-268)
    >>404
    http://gigazine.net/news/20200629-apple-web-api-decline/

    Safariが使えないAPI

    ・Web Bluetooth
    ・Web MIDI API
    ・Magnetometer API
    ・Web NFC
    ・Navigator API: deviceMemory
    ・NetworkInformation API
    ・Battery Status API
    ・Web Bluetooth Scanning
    ・AmbientLightSensor API
    ・EME Extension: HDCP Policy Check
    ・Proximity API
    ・WebHID API
    ・Serial API
    ・WebUSB
    ・Idle Detection
    408 : Name_Not - 2021/02/19(金) 06:28:22.55 ID:???.net (+32,+29,-120)
    Safariが使えないと考えるからおかしい Chromeが積極的なだけ
    何かの導入に消極的なことは、ただ遅れてることとは違う
    消極的というのは積極的とおなじだけ特徴的だし、特長になりうる

    どうしても先進機能を使いたい・使わせたいならChromeを使えばいい
    でもSafariを使っている人はそもそもそういうことを求めてはいない
    アイホンは諦めろ それだけでしょ
    409 : Name_Not - 2021/02/19(金) 08:28:01.65 ID:???.net (+27,+30,-154)
    >>407
    それらは遅れてるんじゃなくて明確な意図を持って実装しないという話では
    ほとんどのものはブラウザにハード触らせたいGoogleが自分の都合で実装して
    それをブラウザにハード触らせたくないAppleが自分の都合で実装しないと言ってるんでしょ

    それらに関してはMozillaもApple寄りだし
    その件に限ってはAppleの方針に賛成だな
    何でもかんでもブラウザが触れるのは嫌だ
    410 : Name_Not - 2021/02/19(金) 11:31:17.97 ID:???.net (-22,-29,-16)
    >>409
    他のブラウザができることをSafariはできないんだよ
    だから旧世代

    アップルがiOSアプリを売りつけるために
    ブラウザの機能を制限してるのはわかるけどなw
    411 : Name_Not - 2021/02/19(金) 11:48:51.88 ID:???.net (+29,+29,-6)
    >>410
    つまりIEは良かったと?
    そんなばかなw
    412 : Name_Not - 2021/02/19(金) 17:26:09.40 ID:???.net (-28,-30,-199)
    ループ処理の中でイベントを設定して、呼び出されるコールバック関数側で
    どうにかインデックス番号を取得する方法はありませんか?
    無名関数を使わない方法が知りたいです。
    よろしくお願いします。

    var sample = function() {
    console.log(i);
    };
    var arr = [xxx, yyy, zzz];
    arr.forEach(function(v, i, arr) {
    arr[i].addEventListener('click', sample);
    });
    413 : Name_Not - 2021/02/19(金) 17:55:57.65 ID:???.net (+25,+28,-13)
    無名関数つかっとるやないけ
    415 : Name_Not - 2021/02/19(金) 18:15:13.56 ID:???.net (+35,+29,-70)
    >>413
    失礼いたしました。
    イベントリスナで呼び出す関数に無名関数使わない方法で対応できたらと考えています。

    >>414
    ほんとですね!!!
    全然気づきませんでした。

    ついでに質問についても教えていただけますと幸いです。
    416 : Name_Not - 2021/02/19(金) 18:52:54.51 ID:???.net (+33,+29,-2)
    >>415

    >>321を読んで考えて
    もしわからないなら何がわからないのかを書いて
    417 : Name_Not - 2021/02/19(金) 19:36:36.57 ID:???.net (+30,+29,-7)
    >>416
    すみませんが何が行われているのか全くわからないです
    どうしましょ・・・・・・・・・・・
    418 : Name_Not - 2021/02/19(金) 21:05:13.87 ID:???.net (-20,-30,-201)
    >>417
    まじかー
    アロー関数じゃなくて普通の関数で書けば↓こんな形

    var sample = function(i) {
    return function() {console.log(i)};
    };

    var arr = [xxx, yyy, zzz];
    arr.forEach(function(v, i) {
    v.addEventListener('click', sample(i)); //← sample(i)を実行した結果のfunction(){console.log(i)}がイベントハンドラになる
    });
    419 : Name_Not - 2021/02/19(金) 21:06:32.18 ID:???.net (-27,-30,-85)
    var sample = function(i) {
    return function() {console.log(i)};
    };

    ↑をアロー関数で書けば↓こうなる

    var sample = (i) => () => console.log(i);
    420 : Name_Not - 2021/02/19(金) 21:16:32.41 ID:???.net (+25,+29,-20)
    >>418-419
    アホ向けの解説多謝です
    コールバック関数ってカッコ付けてよいのですね!!!
    絶対カッコ取らないと駄目だと思ってました

    少しいじってみますね
    421 : Name_Not - 2021/02/19(金) 21:25:53.87 ID:???.net (-26,-29,-37)
    この場合のsampleはコールバック関数ではなくてコールバック関数を生成する関数だよ
    422 : Name_Not - 2021/02/20(土) 00:21:02.58 ID:???.net (+27,+29,-17)
    今はもうだいぶ一般的になっちゃったけど昔は高階関数ってJSのお家芸みたいなとこあったよね。
    いやlispとかまで言われたらあれだけどメインストリーム言語としては。
    423 : Name_Not - 2021/02/20(土) 06:40:02.35 ID:???.net (+22,+29,+0)
    イベントドリブンだからね
    424 : Name_Not - 2021/02/20(土) 11:29:55.21 ID:???.net (+24,+29,-97)
    >>421
    ありがとうございます。

    ちなみになのですが、関数の中で関数返しているのでsampleメソッドはクロージャ扱いになるんでしょうか?

    また、詳細を調べる際のワードとしては「部分適用」になるのでしょうか?
    部分適用という使い方としては出てくるのですが、今回のようにコールバック関数に引数を渡すための
    手法の名前がありましたら、詳しく調べたいので教えていただけないでしょうか。
    425 : Name_Not - 2021/02/20(土) 12:34:53.59 ID:???.net (-17,-30,-114)
    >>424
    ならない
    この中でクロージャは 変数 i

    function(i){...} だけで有効であるはずのローカルスコープの変数 i が、sampleが返してくるコールバック関数を実行した時にも参照される
    これは i の内容が、function(i) が実行された時のスコープの環境を参照して決定されるため
    この様に、それが定義された環境が記録されていて、実行時に参照される変数をクロージャという
    426 : Name_Not - 2021/02/20(土) 12:43:44.44 ID:???.net (-23,-30,-138)
    >>424
    sampleが返す関数がクロージャ
    sample自体はクロージャではない

    コールバック関数に引数を渡すための手法の名前は聞いたことがない

    インラインの関数式でクロージャを使うほうが一般的なパターン
    arr.forEach(function(v, i) {
    v.addEventListener('click', () => console.log(i));
    });
    427 : Name_Not - 2021/02/20(土) 12:47:49.71 ID:???.net (+32,+29,-50)
    部分適用は↓ここではちょっと違う解説をされてるけど
    JSに限らずいろんな言語に共通する考え方
    JSの場合は部分適用するのにクロージャを使うというだけ
    http://ja.javascript.info/currying-partials
    428 : Name_Not - 2021/02/20(土) 20:19:10.74 ID:???.net (-5,-5,-11)
    クロージャを使う?
    意味不明 JSのユーザー定義関数はほぼ全てクロージャになるんだが
    429 : Name_Not - 2021/02/20(土) 20:22:39.19 ID:???.net (+30,+29,-58)
    >>425-426
    ありがとうございます。
    クロージャはsampleの中の変数なのですね。
    勘違いしていたようです・・・・・・

    インラインだと冗長な気がしてしまって、名前付けた関数を
    使うようにしてみているのですが、質問しました引数渡せない問題など
    色々詰まってしまってますw

    リンク先でしっかり学んできます!
    430 : Name_Not - 2021/02/20(土) 20:54:19.36 ID:???.net (-29,-30,-175)
    引数にこだわらずにhtmlエレメントに値持たせてもいいんやで?
    var sample = function(event) {
    console.log(event.target.dataset.index);
    };
    var arr = [xxx, yyy, zzz];
    arr.forEach(function(v, i) {
    v.dataset.index = i;
    v.addEventListener('click', sample);
    });
    431 : Name_Not - 2021/02/20(土) 23:39:34.27 ID:RDdPohk5.net (+4,+10,+0)
    >>428
    詳しく!
    432 : Name_Not - 2021/02/21(日) 04:59:19.18 ID:???.net (+29,+23,-32)
    >>411
    IEが良かったなんて言ってないけど?
    Chrome or Edgeはいいよ
    最先端だよ
    433 : Name_Not - 2021/02/21(日) 05:54:33.25 ID:H6h5PYSO.net (+34,+29,-16)
    >>432
    だって他のブラウザに出来ないことができるのが良いって判断なんでしょ?
    まさにIEじゃん、00年代の
    434 : Name_Not - 2021/02/21(日) 09:51:01.52 ID:???.net (+32,+29,-51)
    >>431
    JSの関数コンテキストは定義された場所のスコープを引き継ぐのだからクロージャと言える
    (実エンジンではデバックのための情報を除いてカットされる)
    435 : Name_Not - 2021/02/21(日) 09:54:45.81 ID:???.net (+33,+29,-41)
    横レスだけど偏屈になると歪んだ考え方しちゃうのね
    IEができたこととは全く意味合いが異なると思うけどw
    完全に拗らせてるわ
    437 : Name_Not - 2021/02/21(日) 12:00:15.43 ID:r7q3VAly.net (+23,+26,+1)
    >>434
    なるほど
    438 : Name_Not - 2021/02/21(日) 12:02:05.38 ID:r7q3VAly.net (+58,+29,-67)
    >>435
    俺も横レスな上に
    IEを擁護するようであれなんだが

    IEが先進的だったこともあったんだぜ
    xhrもネットスケープより前に出来てたし

    まあそのせいで
    向こう20年の悪夢を産んだわけだが
    439 : Name_Not - 2021/02/21(日) 12:33:24.68 ID:???.net (+27,+29,-14)
    どう見ても現代の話しているやつに、なんで唐突に20年前の話振り始めたん?
    コミュ障なの?
    440 : 438 - 2021/02/21(日) 12:37:53.17 ID:r7q3VAly.net (+33,+29,-31)
    ごめーん
    俺は見ててちょっと懐かしくなっちゃっただけ
    スレ違いすまぬ
    441 : Name_Not - 2021/02/21(日) 12:42:29.63 ID:???.net (+32,+29,-7)
    >>440
    スレは合ってるよ
    空気嫁ないガイジなだけだよ
    442 : 438 - 2021/02/21(日) 12:48:48.77 ID:r7q3VAly.net (+27,+29,-30)
    ガイジってよく見るけど実はよくわかってない…
    それを書くと俺はどんなダメージを負えばいいのん?
    443 : Name_Not - 2021/02/21(日) 13:01:14.41 ID:???.net (+37,+29,-34)
    >>433
    > だって他のブラウザに出来ないことができるのが良いって判断なんでしょ?
    そんなこと一言も言ってないよね。お前の思い込みだよね。

    特定のOS専用や非公開な仕様ではなく
    オープンなウェブ技術を開発、採用ししているブラウザが最先端のブラウザ
    444 : Name_Not - 2021/02/21(日) 13:03:35.69 ID:???.net (+40,+29,-101)
    >>438
    その通り。技術自体はIEは先進的だった。
    良くないのはその技術がクローズドだった点

    オープンな場で議論して仕様を策定するのではなく
    MSの気分次第で実装されていた

    Chrome or Edgeではそうじゃないので最先端のブラウザだし
    それに追いつけないSafariはもはや過去のブラウザ
    Safariのために特別な対応が必要だったり
    Safari自体を非推奨にしなければならなくなってる
    445 : Name_Not - 2021/02/21(日) 15:21:02.34 ID:???.net (+33,+30,+0)
    日本の与党と野党みたいなもんでしょ
    本当であれば皆で方策を出し合って決めるのが理想だが
    力ある者が思いついたアイディアに対して力なき者はただ難色を示すことが仕事になってるんでしょ

    そこでとりあえずストップして内容を改めましょうかとか、
    皆でミニマムなところからやってみて意見を出し合いましょうかとかなればいいんだけど、
    意見が割れてるのね、じゃあそれぞれの方針でそれぞれでやって確かめていきましょとなって
    結局は力ある者の意見が通ることになってるんでしょ

    力関係が崩れている期間が長くなりすぎるとお互いに対する緊張感がなくなって
    他所を見るより自分自身がどうやって行くかが重要になってくるからこうなってしまう
    SafariもHTML5ムーブメント初期はデザイン方面などで色々とやる気だったけど
    やる気だった方向性ではそんなに急には伸びそうになくて覇権は取れないし、
    アプリプラットフォームとしてのWebという方向性ではビジネスの観点からやる気を出すことができない
    だからこうなってしまうのは仕方がなかったこと

    それとそもそもオープンオープンって言うけどさ
    昔ながらの草案から段階踏んで比較的幅広いメンバーで議論を重ねて勧告へ向かっていくのとは違って
    どっかのチームがGitHubに公開して、issueを受け付けとくね、聞くかどうかはしらんけど
    とりあえず実装初めて使ってみながら変えていこう的なノリが最近多いのよ

    公開ドキュメントによく鍵かかってたりもするし、リクエストしても承認されない
    恣意的ではないかも知れないが、どうせ関係者しか関わってこないだろうという気持ちがある証拠だと思ってる
    そういう機能をたくさん積んだブラウザが最先端のブラウザなんだろうか?
    確かにプログラマとしてはまともで使える機能が多く乗った環境のほうが良い

    でもユーザーにとっては例えばアクセシビリティが高いとか、セキュリティに拘ってるとかいうのでも
    十分「最先端」のブラウザなんだよね
    そんな今年1回使うかどうか分からない機能よりも、毎日の使い勝手のほうが重要なんだから
    447 : Name_Not - 2021/02/21(日) 16:57:23.34 ID:???.net (-28,-24,-4)
    IE問題とSafari問題は質が違うよね

    ま、どうでもいいけど
    450 : Name_Not - 2021/02/21(日) 20:44:34.22 ID:???.net (-25,-30,+0)
    >>449
    それがダメなのはaddの時に渡すsample(i)とremoveの時に渡すsample(i)が
    違うオブジェクトだからじゃないかな
    removeに渡すのはaddと同じじゃないとダメだと思う
    なのでaddの時に引数をキーにしたMap作っとくとか?
    質問とは関係ないけど今はvarじゃなくてletとconst使う方がいいと思う

    (略)
    const map = new Map();

    Object.keys(test).forEach(function(v, i) {
    const func = sample(i)
    test[v].addEventListener('click', func);
    map.set(i, func)
    });

    var removeEvent = function() {
    Object.keys(test).forEach(function(v, i) {
    const func = map.get(i);
    test[v].removeEventListener('click', func);
    map.delete(i);
    });
    };
    (略)

    動作確認はしてない
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について