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

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

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

    251 = :

    >>181
    var button = document.getElementById('button');
    button.addEventListener('keydown', function(e){
    ~処理~
    }, false);

    と書いてしまうと、無名関数内からbuttonを参照し、イベントリスナーによりbuttonが無名関数を参照する循環参照となり
    メモリー解放がされなくなる=メモリーリークが発生する これを断ち切るには

    document.getElementById('button').addEventListener('keydown', function(e){
    ~処理~
    }, false);

    のように変数を使わないようにするか

    var button = document.getElementById('button');
    button.addEventListener('keydown', function(e){
    ~処理~
    }, false);
    button = null; //←nullを代入して変数buttonのDOMオブジェクトへの参照を切る

    ・・・のように前にここで教わったがうまく理解・説明できている自信がないw

    252 = :

    そんなこと考慮する必要ない
    昔微々たる高速化のために配列の変わりに
    オブジェクトを使うテクニックがあったが
    今それをやるくらい無駄

    253 = :

    window.openでurl先を開いた後にtest関数を実行させたいのですが実行できません

    var w =window.open("http://www.yahoo.co.jp");
    function test(){alert(1);}
    w.addEventListener("load", test, false);

    アドバイスお願いします

    254 = :

    そういうのをXSSといいます

    255 = :

    >>251
    だーかーらー、最初から循環参照しないように書け
    これはデザインの話だから、高速化のテクニックと同じに考えるバカに関わるな

    256 = :

    >>255
    いきなりバカ呼ばわりしないでおくれよ

    微々たる速度差を追求するのと同じように
    普通気にしなくてもいいという意味で言ったんだけど
    どこかそんなにおかしいのなら謝るからちゃんと教えてくれない?

    別にデザインとテクニックを一緒に語ったわけじゃないよ
    気にしなくていいよって言いたかったの

    257 = :

    >>256
    循環参照しないように書くと設計の根本的な部分が変わる
    それを「微々たる」と言うのは、お前が何も理解してないバカだからだろ
    バカはバカのままでいいが、他人をバカに巻き込むな

    258 = :

    いつものやつか

    259 = :

    >>254
    ブックマークレットで使いたいんですがやっぱりできないですかね?

    260 = :

    >>253
    FAQ >>3 Q1/A1を読んでね。終了。

    262 = :

    >>257
    自分が言ってるのはあくまでメモリの話ね
    そんなにメモリを気にしなくても大丈夫って言いたいの

    263 = :

    >>260
    裏技とかないですか?

    266 = :

    確かに今まではXSS=脆弱性でevalと絡むときは危険以外の何物でもなかったけど
    XSSってよく考えたらCrossSiteScriptingの略だから良い意味でも使っていいんだよな

    メッセージングとかこれからはサイト間の良い繋がりが大事になってくるかもしれない
    ワーカーもそうだけど、そういった場所でevalが活躍する日もあるかもな

    267 = :

    >>262
    お前が「気にしなくても大丈夫」なコードしか書いたことがない、という個人的事情と
    もすこしでかい開発でメモリ事情も考慮した設計をしなければならない事情を
    一緒くたにすんな、と言ってんだよバカ

    268 = :

    スマホ用に作るとメモリを気にしないといけないのだよ

    269 = :

    >267-268
    一日中起動しっぱなしのアプリとかならわかるけど
    たかがイベントリスナーの1つや2つ、もしかしたら100個くらいあるのかもしれないけど
    ページを移行するまでのちょっとした時間動くスクリプトにおいて
    KBレベルのメモリは気にする必要普通はないと思う

    270 = :

    >>269
    だからさあ画像を裏で読み込んだりする場面で気にしないといけないのよ

    272 = :

    >>269
    ページ移行してもメモリが開放されないのがメモリリークじゃないの
    スマホ用のブラウザ(=最近のブラウザ)なら起きないと思うけど

    273 = :

    >>271
    たとえばグローバルな関数を定義して、その関数をイベントハンドラとして登録すれば
    クロージャがないので循環参照も無いよね。

    275 = :

    >>274
    window (グローバルオブジェクト)はJS内のどっからでもアクセスできるんでわざわざ
    イベントリスナにその参照を保持したりしないでしょ。

    276 = :

    DOMエンジン―JavaScriptエンジン間の参照を切る

    (function() {
        var ref = []; // Array
        ref[0] = document.createElement("div");
        ref[1] = document.createElement("object");
        …
        ref[0].addEventListener("click", function() { alert(ref)… // 関数Example
    })();
    関数Exampleはrefを覗けるがrefに入ってる要素を直接は覗けないのでここで切れる

    277 = :

    var name=document.form.name.value;
    テキストボックスで取得した値を変数nameに入れて、
    nameが半角英数字とそれ以外って判定するにはどうするのですか?
    正規表現ですか?

    278 = :

    >>276
    循環の輪がつながってちゃ意味ないでしょ

    279 = :

    if(/^[A-Za-z0-9]+$/.test(name))
        alert("OK");

    半角全角の違いを許容しない仕様は避けるべき、混在を許容するか内部で自動的に半角に揃えるようにすることをお勧めする
    たとえば、Excelが全角数字をただの文字として扱うと妄想してみよう、使い勝手はどうだろうか

    280 = :

    >>279
    ありがとうございました。
    全角は半角変換することにします。

    281 = :

    メモリリークするって言ってた人は、今度は循環参照って言うようになったみたいだね

    282 = :

    もしループで無名関数いっぱい作ってたらおもしろいな

    283 = :

    >>279
    最後の行がなければ完璧なんだが…惜しい

    284 = :

    匿名関数と無名関数って同じ意味ですか?

    285 = :

    単一ページのメモリリークなんて気にしなくていいよ

    286 = :

    メモリリークは単一ページの中で起きても他のページに移ったあともメモリが解放されなく
    なる問題。解放するにはブラウザを終了させるしかない。ま、今のブラウザでは問題ない
    んだから別に無視でいいと思うけど、「他のページに移ればそれで終わる」問題ではなかったのね。

    287 = :

    だからそんなこと気にする必要一切無し
    残念なことに俺が使ってるブラウザは今だにメモリリーク起こるが
    重くなったら一旦閉じればいいだけのこと

    288 = :

    Web製作的には、気にするかどうか決めるのはお客様であってアンタじゃないの。
    アンタの主張はそれ以上ないんだから黙ってて。

    289 = :

    var a = (20.2*10) - (20.1*10);
    console.log(a);
    この結果が1になるのに

    var a = (20.02*100) - (20.01*100);
    console.log(a);
    この結果が1にならず、0.9999略になるのはなぜですか?

    290 = :

    >>288
    お客様?
    はて、質問者はそんな条件は出してなかったが
    それは君のただの思い込みでしょ?
    自分は一般論を言ったまでだ

    291 = :

    >>289
    両方1にならないよ
    何のブラウザ使ってる?

    292 = :

    >>291
    chromeのコンソール

    293 = :

    >>290
    話がかみ合わないのは君の経験不足
    一度スマフォでゲームを作る仕事をやってみればいい

    294 = :

    >>289
    そこらの問題はあれだ
    0.3 != 0.2 + 0.1
    これらと同じで浮動小数点数の問題だ

    295 = :

    >>294
    小数点同士計算しないように掛けてから計算してるのに?

    298 = :

    function F() {
    var private = 2;
    this.arg = 1;
    this.calc = function () {
    return this.arg * private;
    }
    }
    こんなクラスもどき関数というかコンストラクタを
    function F() {
    var private = 2;
    this.arg = 1;
    Object.defineProperty(this,'calc',{
    value: function () {
    return this.arg * private;
    }
    });
    }
    こんな感じにdefineProperty使ったのに書き換えられるようになったりしたけど
    環境固定でdefineProperty使えるならやっぱ後者の方がいいのかな

    299 = :

    >>298
    それ読みにくくなっただけでメリットが見えないんやけど
    なんで書き換えなきゃならんのん

    300 = :

    一番でかいのは書き換え不可に出来る点かな
    可読性とかを考えるなら上だろうけど
    下も読み慣れれば然程変わった書き方でも無いし
    setter/getterを定義する時も同様の書き方になるし
    問題ないのではないかと思ってどうなんだろう?と思った


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

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


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