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

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

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

303 = :

>>292
プログラマとして記述してるコードの意図を読み取るのもいいが、

答えは案外別のところにあって!!!o_oみたいな顔文字だったりしないか?
あるいは!!!iiiみたいなのとか。

304 = :

>>293
循環参照の結論


JavaScriptは原則としてGCを採用しているので循環参照があっても問題なくメモリは解放される。
ただし一部(DOM)はC++で実装されており、参照カウンタが使用されることがある。
最近のブラウザではラッパーオブジェクトによりラップされているため問題ないが
古いブラウザではJavaScriptとC++との間で循環参照があるとメモリリークのもととなる。
http://steps.dodgson.org/b/2012/12/19/dom-and-gc-or-what-happend-at-eden/

それを防ぐにはラッパーオブジェクトと同等の働きをするライブラリ(jQuery)を使用すると良い。
ライブラリを使用するのが嫌な場合は、イベントハンドラの登録時に
クロージャーを使用するのを諦めて名前付き関数を指定する必要がある。

305 = :

結論はJavaScriptでDOMを扱うのならjQueryを使っておけということですね。
そうすれば、古いブラウザのことなんか気にせずに
普通のJavaScriptコードを書くことが出来る。

306 = :

jQuery信者の書き込みが気持ち悪い

307 = :

なら見なければいいのでは?

308 = :

>>304
さすがに恥ずかしくならんか?自分のレベルの低さに。
C++実装=参照カウンタって書いててさぁ。

>古いブラウザではJavaScriptとC++との間で循環参照があるとメモリリークのもととなる。
C++はあくまでCPUのバイナリコード吐かないんだから、
javascriptと直接対話するわけじゃねーよ。そもそもjavascriptがc++で書かれているんだからよ。

ActiveXなりのDOM側のメモリ管理が参照カウンタ方式なのとjavascriptの問題なのに言語なんて関係ねーよw
DOM側が例えGCだろうとjavascript側のGCと管理を別にしてるなら解放されねーって問題なんだよ。

310 = :

>>308
リンク先ぐらいよもうよ。全く読んでないでしょ?


> GC つき言語 (JavaScript) のコードと C++ で書かれたコードとの連携は最たる面倒の1つ。 .
> たとえば WebKit の DOM は C++ で実装されており、 C++ のオブジェクトは JavaScript
> 処理系の GC に追跡されていない。かわりに C++ 固有の参照カウント方式で管理されている。
> こいつら C++ オブジェクトをどうやって JavaScript と混ぜるかは、一部ブラウザ開発者を悩ませてきた

> ラッパーオブジェクト
>
> C++ のオブジェクトに JavaScript オブジェクトの姿を与えるのは ラッパーオブジェクト の仕事だ。
> ラッパーオブジェクトは C++ のオブジェクトと対になる JavaScript オブジェクトで、
> 対応する C++ オブジェクトへのポインタをこっそり持っている。 ラッパーオブジェクトは、
> C++ オブジェクトを JavaScript の世界に持ち出す際、必要に応じて作られる。

311 = :

結論と言いつつ突拍子もなくC++の話が出てきてワロタ
あと内容が高度すぎるし、今のブラウザではほとんど実用性ないから、テンプレに入れる必要なくね

313 = :

ごく一部のブラウザのために、クロージャーを使うな。とか
今思うとアホなこと言ってるよなw

314 = :

ここの人たちはすぐ周囲に影響されるな…
今出ている情報で言葉遊びしているようにしか見えない
IE6SP2も>>143が出るまで話題にも上がらなかったし、まともな書き込みが浮いて見える現状が異常だな

315 = :

>>310
読んだ上で言ってるよ。

>>311
低レベルじゃね?

316 = :

>>143のリンク先にも書いてあるね

> (※jQuery にも同様の処理が入っています)

jQueryって偉大だったんだな。

317 = :

>>314みたいに馬鹿なのに自分だけ高みに置こうとする馬鹿はとりわけ馬鹿

318 = :

IE6SP2でしか起きないかなり小さな問題なのに、
そのあたりを意図的に曖昧にして問題をなるべく大きく見せようとしてる奴がいるよな
そういうエゴに囚われるやつはB級プログラマー

319 = :

S級ってR級の下だろ?
A級からS級まで階級分けるとしてS級ってドンだけ無能なの?
そもそも言語通じるレベルなの?

321 = :

あるサイトに書かれていたひらがなカタカナ変換のサンプルプログラムをコピペして、
ゲームをプログラムしました。

そのゲームを自分のアフィをつけたサイトに載せているのですが、
著作権的に問題はあるのでしょうか?

322 = :

a.a = 1;
a.b = 2;

みたいな変数を全部出力するとき
forとfor inとforEachどれがいいですか?

323 = :

>>304
一応、補足。

> それを防ぐにはラッパーオブジェクトと同等の働きをするライブラリ(jQuery)を使用すると良い。
> ライブラリを使用するのが嫌な場合は、イベントハンドラの登録時に
> クロージャーを使用するのを諦めて名前付き関数を指定する必要がある。
ライブラリ未使用でも
・jQueryのようにラップする
・非Strict Modeならarguments.callee
で解決できるね。
実際、自分でコードを書いている人は自分なりのラップ関数を定義している人が多いように思う。

---
ついでだけど、ActiveXObject にも同様のメモリリーク問題があるんだよね。
http://d.hatena.ne.jp/think49/20110513/1305277906
attachEvent の event.target で xhr を参照できれば問題なかったんだけど、attachEvent の中途半端さは本当に困る。

324 = :

>>321
日本においては著作権は自動的に発生するものなので他人の著作物を無許可でコピーするのは違法です。
「あるサイト」のコードのライセンスを確認して下さい。
ライセンスを満たしていないなら問題があります。
何も書かれていなければ、製作者にライセンスを確認して守る必要があります。
Copyright は基本的にはつける必要があります(NYSL等の例外はありますが)。

325 = :

>>322
まず、前提がおかしいので補足を。
- for, forEach は配列用関数なので Object に対して適用できません。Object.keys と併用することが前提ですか?
- プロパティの順番に意味はありますか?意味があるとしたら、どのような順序で列挙することを期待しますか?

326 = :

>>325
var a = {"a": 1, "b":2, "c":3};
1,2,3を出力できさえできればばいいんです
難しいことはわかりません
値が出力できればいいんです

327 = :

順番も関係ないです
とにかオブジェクトの中の値を全部出力したいだけなんです

328 = :

>>323
ここはJavaScriptスレだからjQueryを使って解決って言うよりも
どういうふうにすると解決するのかが知りたい

329 = :

>>326-327
順不同で良いなら for-in で十分かと。

var obj = {a: 1, b:2, c:3};

for (var key in obj) {
if (obj.hasOwnProperty(key)) {
  console.log(obj[key]);
 }
}

330 = :

>>328
どうするかは書いたつもりだけど、どこがわからないんだろう?

332 = :

(funciton(global){
global = null;
})(window);
はイベントリスナが消えちゃうから解決にならない

333 = :

余計な変数を巻き込まないように
関数を作成して返す関数を作ればいいじゃん

334 = :

c++とjsで循環してるとか書く必要ないだろ
その説明が合ってるのか間違ってるのか分からないが、
domとjsで循環参照してはいけないということは分かる
誰かが書いたブログを出典にするのではなく
jsの範疇で理解出来る言葉で書くべき

335 = :

>>332
美しいコードとは思わないが、イベントリスナ登録後に null を代入するなら消えることはない
http://jsfiddle.net/1wvzd35k/1/

336 = :

以前DOMとjsの循環参照が見つかった時は
そんなのjs側が考慮する問題じゃないって結論だったような

337 = :

夏時間かどうかを判定する方法を教えてください
IE9以下とIE10以上で挙動が違うので夏時間かどうか知りたいのです

338 = :

どちらかといえば、クロージャのクロージャの影響範囲が広いコードを修正する意味合いが強い気がする
>>333のように気をつけていれば、メモリ使用量も少なくなるし

339 = :

>>337
> IE9以下とIE10以上で挙動が違うので夏時間かどうか知りたいのです
ごめん。因果関係が分からない。
「IE9以下とIE10以上で挙動が違う」から「夏時間かどうか知りたい」ってどういう事?
new Date で現在時刻を取得して夏時間か判定するだけの簡単な要件に思えるんだけど。

340 = :

>>339
http://msdn.microsoft.com/ja-jp/library/ie/jj863688(v=vs.85).aspx

341 = :

>>340
現在時刻ではなく、指定時刻が夏時間か知りたかったのね。
Date.prototype.toUTCString は実装依存だから元々、この関数に頼るべきじゃない(IE9とIE10で実装が変わっても文句はいえない)。
http://es5.github.io/#x15.9.5.42

new Date, setDate, setHours 等の実装依存でないメソッドで指定すれば問題にならないと思うよ。

342 = :

どうでもいいが、「IE9以下とIE10以上で挙動が違う」から「夏時間かどうか知りたい」ではないな
「夏時間かどうか知りたいが、IE9以下とIE10以上で Date.prototype.toUTCString の挙動が違うから困っている。参考URLは~」と書くべきだった

344 = :

>>328
「名前付き関数を指定」のくだりは下記URLの「DOM-script間の循環参照しないパターン[3]」が該当すると思われます。
http://d.hatena.ne.jp/think49/20141005/1412514367

ラッパー関数とはこういうものです。組み込み範囲を自由に出来るのは自作ならではですね。
http://gist.github.com/think49/758906
http://gist.github.com/think49/882821

345 = :

>>341
>new Date, setDate, setHours 等の実装依存でないメソッドで指定すれば問題にならないと思うよ。

実装依存ではない?つまりどの環境でも同じ結果になるとでも?ソースは?

347 = :

クロージャとstaticは同じデスか?

348 = :

「クロージャ」は関数の一種、「static」はキーワードの一つ、
同じであるかどうか比べることジタイ間違っていると思いマス。
「リンゴ」と「赤い」を比べているようなものデス。

ここら辺を参照されタシ。
http://kudox.jp/java-script/js-private-static

349 = :

>>324
なるほど
何も書かれていない個人サイトだけどあまり連絡取りたくないから
サンプルを参考にして作りましたとなるようにプログラムを書き換えておこう

350 = :

クロージャは苦労ジャ
と覚えておけばなんとかなる


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

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


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