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

私的良スレ書庫

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

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

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
301 : Name_Not - 2011/11/23(水) 04:33:03.36 ID:??? (-2,-30,-36)
c=0; if (なんか条件) c+=1;
とあるソースコードで上記のコードを見かけたんだけど
これってc=0;の代入じゃなくてc+=1;の加算代入にしてる意味って何かあるの?
302 : Name_Not - 2011/11/23(水) 04:34:25.58 ID:??? (+31,-30,-68)
上記は誤記した、下記に質問書き直す

c=0; if (なんか条件) c+=1;
とあるソースコードで上記のコードを見かけたんだけど
これってc=1;の代入じゃなくてc+=1;の加算代入にしてる意味って何かあるの?
303 : Name_Not - 2011/11/23(水) 04:38:15.73 ID:??? (+31,-30,-33)
if文で{}括弧使わずカンマで区切って使ったりすると文字数が減る
if (a==b) {a=10; b=20; c=30;}
if (a==b) a=10, b=20, c=30;
304 : Name_Not - 2011/11/23(水) 04:46:02.88 ID:??? (+84,+23,-1)
>>302
意味ないね
305 : Name_Not - 2011/11/23(水) 04:47:13.13 ID:??? (+61,+29,-3)
>>303
な、なるほどこんな使い方が
306 : Name_Not - 2011/11/23(水) 04:51:09.58 ID:??? (+18,-30,-91)
>>300
やはりリークするのですね、ありがとう
そこで疑問ですが、大きなアプリケーションなどを作る方はどのようにイベントリスナーの追加や削除をしているのですか?
追加するときにいちいちdocument.addEventListener ? ~ : ~;などとやっているのでしょうか
それとも関数を使って必ずdetach/removeするという形にしているのでしょうか
307 : Name_Not - 2011/11/23(水) 04:55:08.61 ID:??? (+0,+29,-50)
>>304
ありがとうございました
特に意味ないのですね
意図のわからないコードを書く人のコードを読むのは疲れます
308 : Name_Not - 2011/11/23(水) 04:57:58.05 ID:??? (-2,-30,-24)
通常の式内に混ぜてしまうとか
b = 1, c = 2, g = 3;
a = b + c + (d = 10, e = 12, f = 13) + g; // a = 19
309 : Name_Not - 2011/11/23(水) 05:04:55.49 ID:??? (+52,+29,-26)
意図不明の具体例っすか
310 : Name_Not - 2011/11/23(水) 05:07:57.36 ID:??? (+4,-29,-8)
var a = 0;
var b = 0;

var a = 0, b = 0;
と書いてコードがババァにならないようにするとか。
311 : Name_Not - 2011/11/23(水) 05:08:28.42 ID:??? (-2,-30,-45)
いっそif文やwhile文の条件式に使ってみたり
if (a = 1, b = 2, a != b) alert('baka');
312 : Name_Not - 2011/11/23(水) 05:10:41.81 ID:??? (+0,-30,-26)
>>307
こんな風に並んでたとして
処理順が変わった時にそのまま貼り付けできるようにしてるとかゆー事もあるよ
c=0;
if (なんか条件1) c+=1;
if (なんか条件2) c+=1;
if (なんか条件3) c+=1;
313 : Name_Not - 2011/11/23(水) 05:13:31.33 ID:??? (+3,-30,-73)
>>310それカンマ演算子ちゃう

function hoge() { alert('hoge'); }

if (a = 1, hoge(), a != b) alert('baka'); //hogeる

var b=1, hoge(); //エラー
314 : Name_Not - 2011/11/23(水) 05:18:00.52 ID:??? (+0,+0,+0)
>>307
http://tenhou.net/2/agari1001.js
具体的にはこれのコードなんですけど
こんな感じでコピペのためとは思えなくって
isMentsu:function(m){
var a=(m&7), b=0, c=0;
if (a==1 || a==4) b=c=1; else if (a==2) b=c=2;
m>>=3, a=(m&7)-b;if (a<0) return false;b=c, c=0;if (a==1 || a==4) b+=1, c+=1; else if (a==2) b+=2, c+=2;
m>>=3, a=(m&7)-b;if (a<0) return false;b=c, c=0;if (a==1 || a==4) b+=1, c+=1; else if (a==2) b+=2, c+=2;
m>>=3, a=(m&7)-b;if (a<0) return false;b=c, c=0;if (a==1 || a==4) b+=1, c+=1; else if (a==2) b+=2, c+=2;
m>>=3, a=(m&7)-b;if (a<0) return false;b=c, c=0;if (a==1 || a==4) b+=1, c+=1; else if (a==2) b+=2, c+=2;
m>>=3, a=(m&7)-b;if (a<0) return false;b=c, c=0;if (a==1 || a==4) b+=1, c+=1; else if (a==2) b+=2, c+=2;
m>>=3, a=(m&7)-b;if (a<0) return false;b=c, c=0;if (a==1 || a==4) b+=1, c+=1; else if (a==2) b+=2, c+=2;
m>>=3, a=(m&7)-b;if (a!=0 && a!=3) return false;
m>>=3, a=(m&7)-c;
return a==0 || a==3;
},
315 : Name_Not - 2011/11/23(水) 05:18:53.77 ID:??? (+0,+26,-30)
上記はまた誤記、>>307と自分に安価してしまいました>>312さんへのレスです
316 : Name_Not - 2011/11/23(水) 05:29:25.27 ID:??? (-1,-29,-6)
単に+=2とは違って+=1のところは1を足すというメッセージじゃん。
317 : Name_Not - 2011/11/23(水) 05:33:49.06 ID:??? (+0,+29,-17)
>>314
可読性のために、宣言時に
その変数が使用する予定の型で初期化するというのは割と僕もやります
318 : Name_Not - 2011/11/23(水) 05:38:28.38 ID:??? (+31,-30,-77)
b=c, c=0;if (a==1 || a==4) b+=1, c+=1; else if (a==2) b+=2, c+=2;

b=c, c=0;if (a==1 || a==4) b+=1, c=1; else if (a==2) b+=2, c=2;
つまり人がコードを読む上で上記の2つでは何か意味が違うってことですか?
319 : Name_Not - 2011/11/23(水) 05:40:29.43 ID:??? (+57,+29,-19)
質問を間違えました、意味の違いは何だと思われますか?
320 : Name_Not - 2011/11/23(水) 05:43:45.78 ID:??? (+0,-21,-36)
>>317
加算代入じゃなくただの代入文だと数値じゃなく文字列として初期化されるってことなのでしょうか?
321 : Name_Not - 2011/11/23(水) 05:45:01.18 ID:??? (+0,+19,-20)
>>318
あ、そこで0を代入してたのかw
すいません>>317は忘れてください
322 : Name_Not - 2011/11/23(水) 05:45:22.21 ID:??? (+57,+29,-41)
実行結果に変わりがあるわけじゃないんだし好きに書けばいいじゃないか
こんなくだらないことに拘って質問しまくんなよ
323 : Name_Not - 2011/11/23(水) 05:50:04.82 ID:??? (-2,-30,-40)
ここm>>=3, a=(m&7)-b;やここb=c, c=0;をセミコロンじゃなくカンマで区切ってる意図もわからんな
324 : Name_Not - 2011/11/23(水) 05:52:06.92 ID:??? (+44,+28,+0)
馬鹿ばっかり
325 : Name_Not - 2011/11/23(水) 05:53:23.97 ID:??? (+37,+19,+1)
ルリルリたん
326 : Name_Not - 2011/11/23(水) 06:03:44.99 ID:??? (+36,-30,-43)
実は裏技でね
a = 1; b = 1; よりも a = 1, b = 1; にしたほうが処理速度が少し向上するの
実は裏技でね
a = 0; a = 1; よりも a = 0; a += 1; のほうが処理速度が少し向上するの
327 : Name_Not - 2011/11/23(水) 06:19:01.42 ID:c41B2jVJ (+22,+24,-31)
ただの代入にするとメモリの再割り当てが生じるだろ
328 : Name_Not - 2011/11/23(水) 06:24:34.48 ID:c41B2jVJ (+27,+29,-69)
コンマだと次は必ず式が来るがセミコロンだと次が式とは限らんだろ
コード解析処理に違いがあるだろ
329 : Name_Not - 2011/11/23(水) 06:34:18.39 ID:c41B2jVJ (+25,+27,-26)
314はfor使わずに同じコードわざわざ羅列してんのは速度重視してんの一目で分かるだろ
330 : Name_Not - 2011/11/23(水) 09:32:40.12 ID:??? (+71,+29,-37)
ここできくのがいいのかわからないけど質問します。
ブログの最新記事のみに広告表示させたいんですが、
javascriptでできます?
331 : Name_Not - 2011/11/23(水) 09:43:00.19 ID:??? (+26,-5,+1)
>>330
できます。
332 : think49 - 2011/11/23(水) 10:36:58.70 ID:??? (+25,-29,-81)
>>395,306
原始的な addEvent なら
http://gist.github.com/758906/db5cd03c967c368a50d095854850fb16cf9f95b3
this 値を書き換えたいなら、window unload 時に detachEvent してください。
http://gist.github.com/758906/0e1047fea1f2bf4781811cc3e6d281196448b597
this 値に手を出すなら event まで書き換えておけば面倒がなくて良いと思います。
333 : Name_Not - 2011/11/23(水) 12:00:52.83 ID:??? (+52,+29,-15)
次スレのテンプレにこれもいれて
http://cou929.nu/data/google_javascript_style_guide/
334 : Name_Not - 2011/11/23(水) 14:07:00.91 ID:??? (-16,-29,-97)
>>306
コンテキスト共有の必要がない単発イベントならバブリングを使ってdocumentで監視しろ
コンテキスト共有の必要があるならthisにそれを持たせろ
それだけで循環参照はほぼ防げる

コンテキスト共有の必要があり、かつIEを考慮するなら最後にdetachEventしろ
XHRならonreadystatechangeにnullでも突っ込め

クロージャーを使うな
eventとthisだけで必要なものを受け渡せるようにしろ
335 : Name_Not - 2011/11/23(水) 14:24:40.06 ID:??? (+31,-30,-184)
オブジェクト指向の書き方を教えてください
PHPでいう以下の書き方をprototypeを使わない方法でjavascriptで書くとどう書けますか?

class A
{
private $string;

function _construct($arg)
{
$this->string = $arg;
}

public function echo()
{
return $this->string;
}

public function view()
{
return $this->hidden();
}

private function hidden()
{
return "秘密のあっこちゃん";
}

}

$obj = new A("文字列");
print $obj->echo();
print $obj->view();
336 : Name_Not - 2011/11/23(水) 14:50:58.13 ID:??? (+81,+30,+0)
337 : Name_Not - 2011/11/23(水) 14:56:39.91 ID:??? (+5,-29,-10)
>>334
> XHRならonreadystatechangeにnullでも突っ込め
これは回避できないパターンだったような
338 : Name_Not - 2011/11/23(水) 15:21:05.31 ID:??? (+3,-25,-23)
>>337
すまんnew Functionを突っ込めだな
COM由来のは型が一致しないと代入できんから
339 : Name_Not - 2011/11/23(水) 15:21:25.22 ID:??? (+33,-29,-1)
>>336
それstringがpublicになってる
http://ideone.com/Pe7ar
340 : Name_Not - 2011/11/23(水) 15:26:53.56 ID:??? (+48,+16,+0)
>>336
>>339
神乙
341 : Name_Not - 2011/11/23(水) 15:30:46.12 ID:??? (+12,-30,-179)
>>332,334
ありがとうございます
>>332
やはりクロージャを使わないaddEventでthisやeventオブジェクトの違いを関数内で吸収するか
detachEventをするために無名関数は使わず、unloadですべてdettachEventする仕組みを組まなければならないようですね
>>334
なるほど、上書きしたり削除しない親要素で監視するというのは盲点でした そうします
>コンテキスト共有の必要があるならthisにそれを持たせろ
これがよくわからないのですが、古いIEではthis = event.srcElementみたいに書くということでしょうか?
343 : Name_Not - 2011/11/23(水) 17:28:53.58 ID:??? (-29,-30,-82)
> function() { location.href = 't2.html'; }

この関数式が評価されスコープチェーンが形成されるとき
実行中の関数(test)が持つスコープチェーンが渡され加えられる。これがクロージャね。

循環参照となるオブジェクトはスコープチェーンの中ってことですよ。
344 : Name_Not - 2011/11/23(水) 17:46:46.65 ID:??? (+4,-30,+0)
>>341
var listener = {
  draggable: false,
  handleEvent: function(e) {
    switch (e.type) {
    case 'mousedown': this.dragging = true; return;
    case 'mousemove': ...; return;
    case 'mouseup': this.dragging = false; return;
    }
  }
};
document.addEventListener('mousedown', listener);
document.addEventListener('mousemove', listener);
document.addEventListener('mouseup', listener);

Netscapeのversion.6からこう書けた
Safariはversion 3、Operaは忘れたが、DOM4に入った(第三引数の省略も)

コールバックに渡す任意の「引数」としてthisを使えばスコープ依存を断ち切れる
thisの使い方を知らない「らいぶらり」があまりに多すぎる
345 : Name_Not - 2011/11/23(水) 18:38:42.74 ID:??? (+62,+29,-3)
>>326-329
嘘を書かないでいただきたい
困ります
347 : Name_Not - 2011/11/23(水) 18:52:49.35 ID:??? (+50,+27,-15)
意味変わらなくね?
349 : Name_Not - 2011/11/23(水) 19:21:07.32 ID:??? (-1,-29,-8)
>>348
> aが1でbが2の場合どうするのよ

a=(b=2,1)
350 : Name_Not - 2011/11/23(水) 19:30:45.94 ID:??? (-2,-30,-49)
a = b = 1;
var a = b = 1;

それと、これは全く意味が異なるから、並列に語れない。
前者は代入式、値が返る。
後者は (変数 a の) 変数宣言、値は返らない。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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