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

    私的良スレ書庫

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

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

    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
    101 : Name_Not - 2014/10/04(土) 12:04:18.15 ID:???.net (+58,+29,-52)
    循環参照するって言ってる奴が、
    循環参照しているという証拠を持ってくれば
    いいだけの話だと思うがね。

    なんだかんだ言い訳ばかりして最後には
    証拠示せずに自分で考えろと言って逃げるだけだし。
    102 : Name_Not - 2014/10/04(土) 12:08:09.09 ID:???.net (+57,+29,-35)
    > 通常のオブジェクト同士の循環参照の話じゃないんだ

    なんかまた変なコト言い出してる・・・
    103 : Name_Not - 2014/10/04(土) 12:09:03.91 ID:???.net (+85,+29,-128)
    >>96
    JavaScriptのローカル変数はC言語とかみたいにスタックに積んでるわけじゃないからな?
    スコープから抜けたときに必ず解放されるわけじゃない
    >>64みたいに、スコープを抜けてもローカル変数を参照可能なクロージャーが生き残る場合には、
    クロージャーと一緒にそのローカル変数の存在も維持されるぞ?
    104 : Name_Not - 2014/10/04(土) 12:09:50.38 ID:???.net (+56,+28,-11)
    説明じゃなくて、なんかツールかコード使って
    循環参照しているって証拠出して。
    105 : Name_Not - 2014/10/04(土) 12:18:24.47 ID:???.net (+60,+29,-92)
    そもそもまともな(参照カウンタ方式じゃない)GCを実装してるプログラミング言語は循環参照なんて問題にならんぞ
    iOSとかが糞すぎるんだよ
    そしてJavaScriptの場合に問題になるのは古いIEのバグみたいなもので
    DOM要素とJavaScript側の要素が相互参照してるときにだけ
    相互参照を検出して解放する仕組みが働かないってだけのことだ
    106 : Name_Not - 2014/10/04(土) 12:30:07.70 ID:???.net (+63,+30,-174)
    GCが流行りだした頃は、
    自分でdeleteしないなんて!って言われたもんだ。

    かってにdeleteされることが嫌で自分で明示的に
    deleteするべきだって主張していた人もいた。

    だが今は、GCに任せるのが主流となった。

    循環参照も同じで、自分で明示的に循環を断ち切らなくても
    どこからも参照されていなければ、自動的に消える。

    だから明示的にdeleteするのと同じで、循環参照であっても
    自動的にdeleteされるのだからGCに任せることに何の問題もない。
    107 : Name_Not - 2014/10/04(土) 12:35:18.84 ID:???.net (+50,+22,-7)
    JavaScriptでも循環参照なんて気にしなくていいよ
    古いIEとか無視でいい
    108 : Name_Not - 2014/10/04(土) 12:44:58.16 ID:???.net (+9,-30,-47)
    [['a', 'aa'], ['b', 'bb'], ['c', 'cc']]
    のような多次元配列を作るにはどのようにすればいいのでしょうか?
    ar = new Array();
    aa = ['a', 'aa'];
    bb = ['b', 'bb'];
    cc = ['c', 'cc'];
    ar.push(aa);
    などでは実現できません
    109 : Name_Not - 2014/10/04(土) 13:14:26.69 ID:???.net (+3,-30,-32)
    > [['a', 'aa'], ['b', 'bb'], ['c', 'cc']]
    > のような多次元配列を作るにはどのようにすればいいのでしょうか?

    ar = [['a', 'aa'], ['b', 'bb'], ['c', 'cc']]
    110 : Name_Not - 2014/10/04(土) 13:23:22.93 ID:???.net (+4,-30,-171)
    >>108
    var arr1 = [],
    arr2 = [],
    aa = ['a', 'aa'],
    bb = ['b', 'bb'],
    cc = ['c', 'cc'];

    arr1.push(aa, bb, cc);
    console.log(arr1); //[Array[2], Array[2], Array[2]]

    arr2 = aa.concat(bb, cc);
    console.log(arr2); //["a", "aa", "b", "bb", "c", "cc"]
    111 : Name_Not - 2014/10/04(土) 13:24:54.90 ID:???.net (+57,+29,-16)
    多次元配列、教えてくれてありがとうございました
    112 : Name_Not - 2014/10/04(土) 15:20:54.12 ID:???.net (+57,+29,-8)
    お前ら今日休みだな
    昨日に比べてスレの勢いが全くない
    113 : Name_Not - 2014/10/04(土) 16:29:51.82 ID:???.net (+56,+28,-13)
    循環参照しないはもする派もプロファイルで数字を貼ってよ
    114 : Name_Not - 2014/10/04(土) 16:30:41.82 ID:???.net (+57,+29,-14)
    俺はわかるけどお前は勉強不足だからわかってないとか文系みたいな主張はいらねえんだよ
    相手を納得させたいのなら数字を出せ
    115 : Name_Not - 2014/10/04(土) 17:00:02.93 ID:???.net (+85,-30,-53)
    >>90-91
    いい加減なこと書くな

    (function(global){
    'use strict';
    global.a = 100;
    console.log(a);
    global = null;
    }(window));
    console.log(window.a); // 100
    116 : Name_Not - 2014/10/04(土) 17:12:13.35 ID:???.net (+8,-9,-1)
    www.
    117 : Name_Not - 2014/10/04(土) 18:24:07.07 ID:???.net (+57,+29,-14)
    お前ら今日何してた?
    引きこもり?
    それともJSの勉強?
    118 : Name_Not - 2014/10/04(土) 18:35:46.87 ID:???.net (+52,+29,-1)
    横山緑と鮫島の放送見てた
    119 : Name_Not - 2014/10/04(土) 19:05:06.41 ID:???.net (+57,+29,-16)
    循環参照をよく分かってないのに態度がでかい人がいるスレ
    120 : Name_Not - 2014/10/04(土) 20:27:58.86 ID:???.net (+52,+29,-8)
    循環参照とただの参照を混同している気がするね。
    121 : Name_Not - 2014/10/04(土) 20:37:40.61 ID:???.net (+68,+29,-20)
    >>115
    それがどうかしたの?

    JavaScriptのオブジェクトは参照型だから
    >>115の例ではwindowとglobalは同じものを指すってだけだよ。
    循環参照は関係ない。
    122 : Name_Not - 2014/10/04(土) 22:07:04.46 ID:???.net (+57,+29,-4)
    よくわからんけど、ちびくろサンボみたいな感じ?
    123 : Name_Not - 2014/10/05(日) 01:42:19.66 ID:???.net (+62,-30,-117)
    循環参照の例が全部イベントハンドラ関連でどうでもいいだろ
    イベントハンドラなんて、ずっと束縛され続けるんだから

    普通、循環参照っていえば↓これ
    var obj0 = { value: 0, next: null };
    var obj1 = { value: 1, next: null };

    obj0.next = obj1;
    obj1.next = obj0;
    console.log(obj0, obj1);

    { value: 0, next: { value: 1, next: [Circular] } } { value: 1, next: { value: 0, next: [Circular] } }

    ちゃんと[Circular]って認識してる
    認識してなかったら、無限ループでハングアップする
    124 : Name_Not - 2014/10/05(日) 02:15:15.86 ID:???.net (+112,+29,-107)
    問題になるのはページ遷移無しで動的にDOM要素を入れ替え続けるような
    単一ページWebアプリとかの場合だよ

    「古いIEにおけるDOM要素を含む循環参照によるメモリリークパターン」のことを
    JavaScript厨が省略して「循環参照」と呼ぶから話がややっこしくなるんだよね
    >>40みたいに
    125 : Name_Not - 2014/10/05(日) 06:34:39.95 ID:PMHOY3tT.net (+17,+29,-30)
    >>123-124は>>120みたいだな
    DOMとスクリプトの循環参照は別だというのにソース出ててもなにも見てないと見える
    126 : Name_Not - 2014/10/05(日) 08:03:48.27 ID:???.net (+66,+29,-10)
    >>125は循環参照の本来の意味を理解できてないのね
    >>123>>124はただの参照の話などしていない
    127 : Name_Not - 2014/10/05(日) 09:02:42.89 ID:PMHOY3tT.net (-13,-18,-26)
    >>127
    同じ循環参照でも意味が違うんだよ
    循環参照については>>47と下記URLを参照すべし
    http://msdn.microsoft.com/ja-jp/library/bb250448.aspx
    128 : Name_Not - 2014/10/05(日) 09:16:44.65 ID:???.net (+95,+29,-39)
    >>127
    省略せずに正しく「DOM要素とスクリプト要素の循環参照」と言えや
    ただの循環参照と言ったら>>123みたいなことで、JavaScriptではこれは全く問題無い
    129 : Name_Not - 2014/10/05(日) 10:45:07.77 ID:???.net (+60,+29,-7)
    >>127みたいなのを循環参照っていうんでしょ?
    130 : Name_Not - 2014/10/05(日) 11:03:16.44 ID:???.net (+6,-29,-101)
    >>129
    その>>127のページの最初の図で示してる状況は
    JScriptスコープの変数とHTMLの要素が循環参照してるのが問題になるということ
    それを「Internet Explorerリークパターンの内の循環参照パターン」と呼んでいる

    仮にその図の変数obj3と変数obj4が互いに参照しあうような状況があったとする
    その状況も「循環参照」だ。しかし「Internet Explorerリークパターン」では無い
    131 : Name_Not - 2014/10/05(日) 11:28:34.41 ID:???.net (+57,-24,-65)
    >>124
    > 問題になるのはページ遷移無しで動的にDOM要素を入れ替え続けるような
    > 単一ページWebアプリとかの場合だよ

    そういうアプリでは動的にDOM要素を削除するので
    その時に循環参照は断ち切られる。
    132 : Name_Not - 2014/10/05(日) 12:27:02.91 ID:???.net (+99,+29,-58)
    >>131
    おまえ釣りだよな?
    古いIEでは、DOM要素がスクリプト要素と循環参照してると、
    そのDOM要素を動的に削除しても循環参照が残るせいでGCが領域を回収できないって話をしてるんだよ
    133 : Name_Not - 2014/10/05(日) 13:44:51.68 ID:???.net (+57,+16,-18)
    >>132
    IEのバグの話はしていない。
    そんなのJavaScriptの問題じゃなくて
    特定のブラウザの問題じゃないか。
    134 : Name_Not - 2014/10/05(日) 14:01:14.28 ID:???.net (+92,-30,+0)
    >>132
    > 古いIEでは、DOM要素がスクリプト要素と循環参照してると

    ということなら、こういうコードは問題ないよね?

    一見クロージャーを使っていて循環参照しているようだが(実際にしているが)
    循環参照しているのは、DOM要素とスクリプトではなく、スクリプトとスクリプトである。

    一旦addClickEventをかましてcallbacks変数に蓄えることで、
    間接的にイベントハンドラを登録している。本当のイベントハンドラの登録はinit時の一回のみ。

    function init() {
     var e = document.getElementById('id');
     e.attachEvent('onclick', onclick);
    }
    init();

    var callbacks = [];
    function onclick() {
     for (var i = 0; i < i.length; i++) {
      callbaks[i]();
     }
    }

    function addClickEvent(callback) {
     callbacks.push(callback);
    }

    (function main(global) {
     global.addClickEvent(function() {console.log(global) }
    })(window);
    135 : Name_Not - 2014/10/05(日) 15:03:53.04 ID:???.net (+3,-24,-21)
    dom要素がJSを参照するってどんな状態?
    136 : Name_Not - 2014/10/05(日) 15:06:27.15 ID:???.net (-6,-29,-16)
    DOM要素に関数登録するだろ
    137 : Name_Not - 2014/10/05(日) 15:22:34.21 ID:???.net (+64,+29,-35)
    話が変わってきたな。DOM要素につけたコードと
    循環参照してるのが古いIEでメモリリークするのであって
    循環参照そのものが悪いわけではなく
    >>134みたいなコードなら問題ないわけか。
    138 : Name_Not - 2014/10/05(日) 18:42:31.51 ID:???.net (-1,-29,-16)
    バグを持ってる古いIEって具体的にバージョン何?
    IE6以下なら今ならもう問題ないよな
    139 : Name_Not - 2014/10/05(日) 18:46:32.09 ID:???.net (+3,-29,-56)
    jQueryのバリデーションのライブラリ探してるんだけど、今は何が良いの?
    exValidationっての見たけど開発が止まっているようだ
    最後の更新が3年前
    validation-Engineってのは最終は2ヶ月前らしいけど
    日本語対応してるのであればやっぱこの2つのうちどっちかなのかな?
    141 : Name_Not - 2014/10/05(日) 19:43:30.30 ID:???.net (+52,+29,-1)
    あ、ありがと
    移動します
    142 : Name_Not - 2014/10/05(日) 19:53:06.82 ID:???.net (+88,+30,-91)
    >>128
    勿論、そのほうが親切だけど、あの文脈ではDOMとスクリプトの循環参照しか思いつかないでしょ
    >>83のようにぐぐればすぐHITするし、>>47にもURLが載っているし、誤解した人は調査不足でしかないと思うよ

    で、問題あるかといえば、現在ではないけど
    ・バグを誘発しやすいから避ける人もいる
    ・無駄にクロージャを生産すべきでない
    という2つの理由から敬遠してる
    少なくとも>>64に関してはどちらも当てはまる
    143 : think49 - 2014/10/05(日) 22:20:06.05 ID:???.net (+86,-29,-45)
    懐かしい話題だったのでメモリリークパターンについてまとめました。
    http://d.hatena.ne.jp/think49/20141005/1412514367
    >>40,42 辺りの Function,prototype.call で循環参照を回避するパターンの答えにもなっているかと。
    144 : Name_Not - 2014/10/05(日) 23:13:28.16 ID:???.net (+1,-26,-26)
    jsとdomで循環参照するとメモリリークするとか
    そんな話はじめて聞いたって思ったらie6sp2でだけ起きるのか
    145 : Name_Not - 2014/10/05(日) 23:15:35.36 ID:???.net (+52,+29,+0)
    一顧だにする必要ないな。
    146 : Name_Not - 2014/10/05(日) 23:23:05.62 ID:???.net (+37,-29,-47)
    http://d.hatena.ne.jp/babu_babu_baboo/20100417/1271465430

    いわゆるクロージャを生成した時点で、関数 (innerFunc) は、変数 (e) を、
    いつでも参照できるようになっている。なので循環参照が成立する。

    これマジ!?
    クロージャは外側の全ての変数のGCを止めるの?
    147 : Name_Not - 2014/10/05(日) 23:37:56.56 ID:???.net (+57,+29,-12)
    http://msdn.microsoft.com/ja-jp/library/bb250448.aspx

    これを読むと、バグというより仕様だったのかな?
    恐ろしい仕様だなあ
    148 : Name_Not - 2014/10/05(日) 23:39:01.25 ID:???.net (+62,+29,-30)
    >>146
    それがクロージャの性質だし、その為に使う
    この性質が分かっていない人が多いから無駄にクロージャを生産するな、といわれる
    149 : Name_Not - 2014/10/05(日) 23:47:14.28 ID:???.net (+128,+29,-31)
    関数の中で使われている変数だけが保存されていると思ってたけど。
    じゃあ関数を返り値にする場合はローカル変数にも気を遣わないといけないのかね
    面倒くせーな
    150 : Name_Not - 2014/10/06(月) 00:49:02.50 ID:???.net (+88,+29,-8)
    >>149
    そんなことも知らずに使っていたのか
    文句いう前に勉強しろよ
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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