元スレ+ JavaScript の質問用スレッド vol.96 +
JavaScript覧 / PC版 /みんなの評価 :
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 = :
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を定義する時も同様の書き方になるし
問題ないのではないかと思ってどうなんだろう?と思った
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.95 + (1001) - [97%] - 2012/1/17 4:16
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.76 + (1001) - [97%] - 2010/3/10 4:02
- + JavaScript の質問用スレッド vol.99 + (1001) - [97%] - 2012/5/7 4:32
- + JavaScript の質問用スレッド vol.98 + (1001) - [97%] - 2012/4/9 14:46
- + JavaScript の質問用スレッド vol.97 + (1001) - [97%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.94 + (1001) - [97%] - 2012/1/8 15:46
- + JavaScript の質問用スレッド vol.93 + (1001) - [97%] - 2012/1/1 4:46
- + JavaScript の質問用スレッド vol.93 + (1001) - [97%] - 2011/12/10 18:31
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/11/15 20:32
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/10/26 4:18
- + JavaScript の質問用スレッド vol.126 + (348) - [95%] - 2023/1/12 17:00
- + JavaScript の質問用スレッド vol.126 + (952) - [95%] - 2015/11/18 13:15
- + JavaScript の質問用スレッド vol.106 + (1001) - [95%] - 2013/7/20 9:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [95%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.136 + (1001) - [95%] - 2019/1/8 11:30
- + JavaScript の質問用スレッド vol.85 + (1001) - [95%] - 2011/4/25 21:32
トップメニューへ / →のくす牧場書庫について