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

    私的良スレ書庫

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

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    401 : Name_Not - 2020/07/15(水) 20:06:29.32 ID:???.net (+34,+29,-115)
    >>400
    ふつうのfunction関数もアロー関数もスコープは関数スコープとブロックスコープを作るよ。
    だから作るスコープの観点では、両者に違いはない。
    もし、function関数とアロー関数に構文以上の違いは無いんですかという質問だったなら話は別だが。
    402 : Name_Not - 2020/07/15(水) 20:15:14.71 ID:???.net (-23,-29,-64)
    >>401
    スコープは一緒なんですか
    クラスのメソッドでthis使う時
    アローだと関数内で使えてfunctionだとnot definedなるのはなぜですか?
    403 : Name_Not - 2020/07/15(水) 20:23:01.70 ID:???.net (+0,+6,+0)
    >>402
    意味が分からないのならthisを使うな
    http://blog.uhy.ooo/entry/2020-05-30/this/
    404 : Name_Not - 2020/07/15(水) 20:29:12.43 ID:???.net (-14,-2,-1)
    ww
    405 : Name_Not - 2020/07/15(水) 20:44:27.91 ID:???.net (+30,+30,-137)
    >>402
    勘違いしがちだけどthisは変数じゃないんだよ
    なので変数のスコープと並べて考えちゃいかん

    実際むしろ逆で
    thisを持つスコープともたないスコープがあるんだが
    いきなりそこから理解するのも難しいと思うので

    とりあえず最初は、大雑把ですまんが
    スコープや状況に応じてバインドされるものが変わるもの
    程度に考えてみるのがいいかもしれない

    そんでthisを使い倒して理解できた気になったら
    改めてECMA Scriptの仕様書を読むと
    より深く理解できると思う
    407 : Name_Not - 2020/07/15(水) 22:01:57.71 ID:???.net (-27,-30,-270)
    >>406
    function f() {
    console.log('this in f:', this);
    }
    function g() {
    'use strict';
    console.log('this in g:', this);
    }
    f(); //=> this in f: グローバルオブジェクト ( ブラウザ環境なら window )
    (0, f)(); //=> this in f: グローバルオブジェクト ( ブラウザ環境なら window )
    g(); //=> 'this in g: undefined
    (0, g)(); //=> 'this in g: undefined
    var obj = {f, g};
    obj.f(); //=> this in f: obj
    (0, obj.f)(); //=> this in f: グローバルオブジェクト ( ブラウザ環境なら window )
    obj.g(); //=> 'this in g: obj
    (0, obj.g)(); //=> 'this in g: undefined

    ガンマ演算子の神業。
    408 : Name_Not - 2020/07/15(水) 22:28:16.78 ID:???.net (+21,+23,-35)
    カンマ演算子ってminifyしたコードではよく使われてるけど
    自分で意識して使ったことなかったわ
    410 : Name_Not - 2020/07/15(水) 23:12:26.81 ID:???.net (+28,+30,-24)
    値として観測されると重ね合わせが壊れて情報が失われるってことでしょ?
    411 : Name_Not - 2020/07/15(水) 23:16:25.22 ID:???.net (+18,+29,-2)
    >>409
    横からだが勉強になった
    413 : Name_Not - 2020/07/16(木) 00:48:08.73 ID:???.net (-28,-30,-143)
    >>409
    疑問に思ったのはそこじゃなかったんだが勉強になった

    ただthisのbindingを知るという目的だと
    コールサイトでのレシーバの有無だけで十分理解できるので
    ちょっと実装の詳細に入り込みすぎてる気もした

    You don’t know JSでthisのbindルールが
    以下の4ルールでまとめられてて個人的にはわかりやすかったかな
    1. new binding
    2. implicit binding (called with context)
    3. explicit binding (call/apply)
    4. default binding (global/undefined)
    415 : Name_Not - 2020/07/16(木) 00:58:08.82 ID:???.net (+27,+29,-18)
    pythonのメソッド記述方式が正解だったか…
    416 : Name_Not - 2020/07/16(木) 01:10:48.50 ID:???.net (+27,+29,-17)
    pythonは他のいろんな使いづらい点が多いからな
    417 : Name_Not - 2020/07/16(木) 09:47:09.85 ID:???.net (+2,+4,+0)
    可能な限りthisを使わないのが正解
    418 : Name_Not - 2020/07/16(木) 10:09:32.79 ID:???.net (+25,+29,-8)
    めんどうだからといって避けていてよいのだろうか?
    419 : Name_Not - 2020/07/16(木) 11:47:32.98 ID:???.net (-23,-29,-80)
    Ruby は一々、self を渡さなくても良いように、実装で頑張った

    JavaScript のthis は、window を指したりする場合があるなど、ややこしいから、
    jQuery, Haxe などでは、this の挙動が変えられた
    420 : Name_Not - 2020/07/16(木) 12:18:59.64 ID:???.net (-28,-29,-21)
    >>418
    that = this とかやってるレガシーなコードに触るときくらい
    それ以外はclassの中くらいにしておいた方が良い
    初心者は特に
    421 : Name_Not - 2020/07/16(木) 19:11:14.75 ID:???.net (+23,+29,-18)
    >>419
    >>413 のようにケースベースで覚えようとするから理解できない
    仕様ベースで覚えれば簡単に理解できる
    422 : Name_Not - 2020/07/16(木) 21:32:07.99 ID:???.net (+27,+29,-2)
    ブラックジョークならぬJSジョークw
    423 : Name_Not - 2020/07/17(金) 04:39:55.87 ID:???.net (+27,+29,-13)
    むしろ内部仕様を理解しようとせずパターンで覚えようと言う方が無理がある
    424 : Name_Not - 2020/07/17(金) 04:49:33.21 ID:???.net (-15,-30,-247)
    > functionと書いた場合、第ゼロ引数とでも呼ばれるものがあると考えればいい
    > つまり function foo(this, a, b, c)

    どういうことかと言うと

    function foo(this, a, b, c) {
      $(element).on('click', function(this, event) {
        // thisはなにか?
      });
    }

    こういうこと。この書き方でthisが何かというと、そりゃ
    呼び出し元が渡したオブジェクトに決まってるだろ?
    引数にあるんだから当たり前。渡す方は自由にthisの内容を変えて渡せる

    一方、アロー関数はfunctionがないのだからthisは存在しない

    function foo(this, a, b, c) {
      $(element).on('click', event => { } );
    }

    その場合のthisはfoo関数に渡されたthisに決まってるだろ?
    こういう話。thisは全てこれで説明できる。

    内部の実装とか仕様とか考えてないで、一番単純な方法で理解しよう
    425 : Name_Not - 2020/07/17(金) 04:53:00.70 ID:???.net (-27,-30,-125)
    こうやってthisは引数で呼び出し側が渡す値って理解すれば、
    Javaなどの言語とJavaScriptはthisが全く同じであることが理解できる
    違うのはthisではなく呼び出し側なんだよ。


    function foo(this, a, b, c) { } という関数をJavaScriptで呼び出す場合
    一般的には obj.foo(a, b, c) という呼び出し方をする。

    このfooのドットの左側、これがthisとして渡される。
    これはJavaなどでも同じなんだよ

    な?thisの仕様は同じだろ?


    違いはJavaScriptは。obj.foo だけではなく obj.call や obj.apply で
    thisを変更して呼び出す方法があるってこと
    426 : Name_Not - 2020/07/17(金) 06:36:30.33 ID:???.net (+29,+29,-35)
    未経験からバックエンドエンジニアは無理で、フロントエンドからやるべきなんですか?
    427 : Name_Not - 2020/07/17(金) 06:45:09.52 ID:???.net (+6,+4,-14)
    >>426
    板違い
    プログラム板じゃなくてプログラマ板にでも行け
    http://medaka.5ch.net/prog/
    428 : Name_Not - 2020/07/17(金) 10:05:31.55 ID:???.net (+4,+6,-3)
    jqおじさんの理解の仕方じゃすぐバグるな
    429 : Name_Not - 2020/07/17(金) 10:58:59.78 ID:???.net (-20,-25,-45)
    thisは呼び出し元が渡すと言うのは良い解釈
    実際の所は関数呼び出し時にthisArgが何になるかはReference値に依存していて
    呼び出し方や呼び出し元などが本質的に結びついているわけではないが、
    Reference値を壊さずに関数呼び出しを行う形は限られてくるので
    superなど一部を除いて実際コード上の位置関係と形で考えることができる
    430 : Name_Not - 2020/07/17(金) 11:41:54.18 ID:???.net (+30,+29,-52)
    thisが難しいのは状況によって何がthisとして渡されるかが様々に変化するってところだからな

    >>424,425の説明は
    何がthisとして渡されるのかは理解してるけれど
    アロー関数のthisが理解できませんという激レアさん以外に意味あるのかな
    431 : Name_Not - 2020/07/17(金) 13:52:00.72 ID:???.net (+29,+28,-65)
    >>424
    なぜ、アローの方が簡単なのか良くわかる、素晴らしい説明!

    JavaScript の場合、非同期処理をよく使うから、
    上の方は、外側・内側の関数のコンテキストが異なることが多い

    だから、this が鬼門

    jQuery は、that = this みたいに書いてるけど、これが分かりやすい
    432 : Name_Not - 2020/07/17(金) 14:00:19.10 ID:???.net (+29,+29,-30)
    かといってthisを説明するのに
    さらに分からないReference値なるものを
    定義も示さず連呼するのに比べれば
    わかりやすく説明しようという努力の分だけマシだと思う
    433 : Name_Not - 2020/07/17(金) 17:15:15.50 ID:???.net (+27,+29,-6)
    自分が分からないことを自分で勉強しようとしない人にはこのスレは向かないね
    434 : Name_Not - 2020/07/17(金) 18:12:59.12 ID:???.net (+27,+29,-18)
    物事をわかりやすく説明できるのはその本質を理解してる人だけ

    説明がわかりにくい人はその物事を真には理解していない
    435 : Name_Not - 2020/07/17(金) 19:04:44.53 ID:???.net (+27,+29,-16)
    って言うけど違うよね。
    それで分かったつもりになっちゃって僕は原子炉に詳しいんだ爆発だしw
    436 : Name_Not - 2020/07/18(土) 03:37:18.64 ID:???.net (+33,+30,-65)
    分かりやすく説明できる <- 説明能力
    物事をものすごく理解していても説明能力に欠ければ分かりやすい説明はできない
    例えばすーぱーぷろぐらまー(宇宙人)が宇宙語で人間にがんばって説明しても理解されない
    辞は達するのみ

    そして相手がチンパン並みの理解力ならいくら分かりやすい説明しても無駄
    結局は双方のバランスが大事
    437 : Name_Not - 2020/07/18(土) 12:30:06.17 ID:???.net (+35,+30,-97)
    Referenceについて述べている >>409は丁寧に概要を説明してるし
    >>429は質問に対する回答をしているわけじゃないでしょ

    >>432の言うように単に連呼してる人なんて実際にはいない
    ただ自分がこれだけの説明を聞いても理解できないし、かと言って調べるのも面倒で
    その苛立ちから横槍を入れているようにしか見えない

    自分が聞きたいことがあるならそれを素直に質問すれば>>409とかが教えてくれるだろうに
    なんで回答者が自分から聞かれてないことまで解説しないといけないのさ?
    ここは自ら学ぶ為のスレだよ?
    438 : Name_Not - 2020/07/18(土) 14:20:04.37 ID:???.net (+30,+27,+0)
    >>437
    そんなにイライラしなくてもw
    439 : Name_Not - 2020/07/18(土) 14:26:13.36 ID:???.net (+33,+29,-37)
    知らない人に対して、知らない人が知らないであろう言葉で説明するのは未熟者
    自分がちゃんと理解してないから説明できない
    440 : Name_Not - 2020/07/18(土) 15:04:09.90 ID:???.net (+38,+30,-114)
    そうした説明では相手に本当に理解させることはできない。
    仮に相対性理論をゴルフで説明できたところで、相手は木星まで光速の70%で行って戻ってきたときの時間の遅れを計算できるようにはならない。理解したつもりにさせられてるだけだからだ。
    こんなものは詐欺師のテクニックや催眠術みたいなもの。
    そうして僕は原子力に詳しいんだ爆発が起きる。
    知ったか量産の害悪でしかない。
    441 : Name_Not - 2020/07/18(土) 16:36:31.42 ID:???.net (+33,+30,-66)
    相手に本当に理解させる必要なんてないからね

    技術者は正確性を重要視するあまり聞き手にとって不要な詳細を語りたがる
    相手を見て情報の取捨選択が出来ない
    常に実装の詳細がダダ漏れの設計と同じ
    442 : Name_Not - 2020/07/18(土) 16:37:35.97 ID:???.net (-3,-1,-30)
    でもQiitaのワイの記事はいつもお世話になってるで
    443 : Name_Not - 2020/07/18(土) 17:44:41.98 ID:???.net (+33,+29,-21)
    >>440
    相手に本当に理解させることは目的ではない
    なぜいきなり100点を取らせようとするのか
    444 : Name_Not - 2020/07/18(土) 17:45:13.80 ID:???.net (+27,+29,-13)
    そうした説明では相手に本当に理解させることはできない。
    そういって数学とは何たるかを小学一年生に語るのであった。
    445 : Name_Not - 2020/07/18(土) 18:18:49.33 ID:???.net (+27,+29,-22)
    「泥団子と泥団子を合わせるとひとつの泥団子になるだろ?だから1足す1は1なんだ!」
    446 : Name_Not - 2020/07/18(土) 19:09:36.34 ID:???.net (+32,+29,-30)
    >>441
    逆に詳細を聞きたがる人もそれなりにいるよね

    話しても良いけど
    理解できる知識と経験ないでしょ?と思う
    448 : Name_Not - 2020/07/20(月) 06:59:18 ID:???.net (-28,-29,-19)
    !
    (
    <
    )

    間違い探しの答えは5箇所!
    449 : Name_Not - 2020/07/20(月) 07:05:44 ID:cg5o0Tfr.net (+12,+25,+0)
    >>448
    そうですね!
    450 : Name_Not - 2020/07/20(月) 14:02:28.31 ID:???.net (-27,-30,-51)
    x+yとa+bが等しい場合に前者のif節は実行されるが後者のif節は実行されない。
    if( !( x+y<=a+b ))とif( x+y>a+b )または
    if( !( x+y<a+b ))とif( x+y>=a+b )なら、
    論理的には同じ。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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