暇つぶし2chat HP
- 暇つぶし2ch657:Name_Not_Found
15/06/15 21:59:25.29 .net
javascriptやjqueryを駆使して凄いwebページ作っても、それを他人にそっくりコピペされて同じようなサイトを作られる危険性が有りますが、どういう対策が有りますか?

658:Name_Not_Found
15/06/16 00:11:49.81 .net
var p = [], a = document.createElement('a');
for (var i = 0; i < 10; i++) {
p.push(document.createElement('p'));
}
p[0].appendChild(a);
こういうのってできますか?

659:Name_Not_Found
15/06/16 00:39:09.49 .net
646 普通にできました。勘違いでした。ごめんなさい。

660:Name_Not_Found
15/06/16 04:24:00.80 .net
>>643
参照渡しは変数渡しの具体的な実装法だ
共有渡しというのは変数渡しや値渡しよりも抽象的で、
渡すというより共有されるということを言ってるだけだから間違いではないよ

661:Name_Not_Found
15/06/16 05:23:07.37 .net
×変数渡しや値渡し
○参照の値渡しや値渡し

662:Name_Not_Found
15/06/16 07:04:26.29 .net
>>648
そういうことじゃない
「参照渡し」という言葉は ES5 にないから実装の話なんだよ
>>641-642は実装と仕様の境界に触れているようだったからね

663:Name_Not_Found
15/06/16 12:32:19.91 .net
ES5にあるのは英語だっていうオチ?w

664:Name_Not_Found
15/06/16 12:52:33.61 .net
javascriptの上級者雑談スレってないの?

665:Name_Not_Found
15/06/16 12:55:06.89 .net
ただの雑談スレならプログラム板にあるぞ

666:Name_Not_Found
15/06/16 13:20:34.68 .net
参照渡し(call by reference)的な何かを ES5 で説明するなら参照型(Reference type)かね
プリミティブ型(Primitive type)は ES5 には書かれてないが、ES6 7.1.1 には書かれている
プリミティブ型は "6.2 ECMAScript Specification Types" に加えてあげてもいい気がする

667:Name_Not_Found
15/06/16 18:05:59.04 DjqSoQ6n.net
初心者ですので大分説明が困難ですが、ご容赦下さい。
CSSも混じってるのでここで質問していいものか解らないのですが、
htmlでよくあるドロップダウンリストメニューをjquery-1.11.3.min.jsを使って作りました。
最初のボタンを1枚の画像から背景位置指定で画像で表示し、カーソルを置くとホバーして画像の色が変わり
その下に背景色とテキストの<li>のリストが出てくる感じです。
リストにカーソルを置いた時に、ナビ画像の色をホバー状態にしたいため、
CSSに
ul.topmenu li a.infopage_button:hover,
ul.topmenu > li.selected > a {
background-position: 0px -100px;
}
としました。
結果的に上手くいったのですが、2個目のボタンを同じように作りCSSに
ul.topmenu li a.actionpage_button:hover,
ul.topmenu > li.selected > a {
background-position: -120px -100px;
}
としたら、2個目のボタンはうまくいきましたが、最初の方のボタンもリストにカーソルがある時、
2個目のボタンと同じホバー状態画像に上書きされてしまいました。
jquery-1.11.3.min.js の中に selected の文字が沢山あったので、これを増やすのかなと思ったりもしていますが
色々調べたところ何を追加すればいいか解りませんでした。
どうしたらリスト選択状態で親のボタンの画像を個別にホバー状態にできるでしょうか?
よろしくお願い致します。

668:Name_Not_Found
15/06/16 18:51:50.69 .net
話を整理しよう
>>650
仕様にあるのはあくまで1つの値に対していろんな場所でいろんな名前が付けられていくというもの
だからそれを言い出したらそもそも「~渡し」という名前で呼ぶ時点で仕様外だ
だけども共有渡しというのは当然仕様書には書かれていないが、
「~渡し」と呼ぶ前提だと最も上の仕様を表したものであるという主張がされてきている
>>654
参照型は変数の解決のためにEnvironmentRecordを前提に発生する副産物で、それ自体が重要ではなく
参照渡しを実現しようとするとERの一部が共有されるという新しいプロセスが必要

669:Name_Not_Found
15/06/16 19:50:59.92 .net
$(window).trigger('resize');
ってやるとリサイズイベントを発生させられるそうですが、
今作っているHTMLで、これをやっても一部の領域が再描画されません。マウスで
ウインドウを少し引っ張って本当の意味でのリサイズをやると、期待通り再描画できます。
プログラム的に強制的に再描画させる方法はありますか?

670:Name_Not_Found
15/06/16 20:17:16.98 .net
>>655
明らかにclass属性値selectedが不適切だな。つうか、2015年現在、そのていどなら、CSSだけでできるから、JS関係ない。

671:Name_Not_Found
15/06/17 07:44:24.48 .net
JSはES6でまともになってきたから、次はCSS及びCSSOMの改善だな。
現状ではあまりにも貧弱すぎる。
まあその前に中途半端なWebComponentの後始末を付けなきゃならんが。

672:Name_Not_Found
15/06/17 12:49:02.99 .net
>>656
> だからそれを言い出したらそもそも「~渡し」という名前で呼ぶ時点で仕様外だ
だから、>>643でそう言ってるよね
仕様書では>>627のいうように渡され方に区別なんてない
「参照渡し」や「共有渡し」「参照の値渡し」は他人に仕組みを伝えるための便宜上の言葉に過ぎない
変数の巻き上げ(hoisting)と同じ
本質的には巻き上げられているわけではなくて、そういう説明にした方がわかりやすいという理由で巻き上げ(hoisting)という言葉が使われている

673:Name_Not_Found
15/06/17 13:17:27.84 .net
>>660
だから便宜上言うにしても参照の値渡しと共有渡しは同列ではないという話をしているんだが
それとhoistingは仕様書にも登場する列記とした概念だ
ここで言う巻き上げとは当然既初期化(変数がスコープ内で利用可能になる)状態の巻き上げだ

674:Name_Not_Found
15/06/17 14:08:37.17 .net
>>556
> 「~渡し」と呼ぶ前提だと最も上の仕様を表したものであるという主張がされてきている
「最も上の仕様」とは何?
ES5 より更に上に仕様書があるとは知らなかった

675:643,660
15/06/17 14:34:16.79 Ve6ycg1I.net
>>661
> だから便宜上言うにしても参照の値渡しと共有渡しは同列ではないという話をしているんだが
自分はそこには言及してないから
>>641の「いずれにしろ参照の値渡しというのも仕様に踏み込みすぎてて間違い」に反論してるだけ
ES5 にない以上、あなたのいう「仕様」が別に存在することになるよね
何かは知らないけど「最も上の仕様」がそれなのかな?
具体的な仕様書の名前や所在をを示して欲しいところだけど
> それとhoistingは仕様書にも登場する列記とした概念だ
ES5 仕様書上で "hoisting" という言葉は検索でHITしなかったけど、どこにあった?

676:Name_Not_Found
15/06/17 15:08:43.00 .net
敢えて生産性という空虚な言葉を使うとゼロだな。
敢えて現実逃避を否定すると孤独な逃亡だな。
そろそろコードでスキルを雄弁に示してくれ。

677:Name_Not_Found
15/06/17 16:16:36.08 .net
>>662
「上の」というのは「上の文章の」であり「仕様にあるのは~」の一文を指してる
>>663
>>642を読んだ上でその質問をしているのか?
ES6仕様書で「Hoist」と検索しなさい
「hoisting」も一件HITする

678:Name_Not_Found
15/06/17 17:28:44.86 .net
>>656を推敲するならこういうことか
× 上の仕様
○ 上述の仕様
× 仕様にあるのはあくまで1つの値に対していろんな場所でいろんな名前が付けられていくというもの
○ ES6 仕様にあるのはあくまで1つの値に対していろんな場所でいろんな名前が付けられていくというもの
上に書いてあるのは仕様じゃなくて「656氏の仕様に対する独自解釈」でしかないよな
「仕様を表したものであるという主張がされてきている」なんてただの主観でしかないのに仕様と同等と主張してたり、意味わからん

679:Name_Not_Found
15/06/17 18:35:21.71 .net
独自解釈も何もそう捉える以外はない
仕様では型よる渡され方の区別はされていない
というか渡すというより仕様での値の取り回しはa is bの積み重ねで成り立っているが
そこをbをコピーしてaとすると解釈すると全て値渡し(複製)になってしまうので、
これはbの値をaという名前で置くと解釈すると、
結局1つの値に対していろんな場所でいろんな名前が付けられていくという論で全て丸く収めることが出来る
まあ参照の値渡しや型による扱いの差を持ちだして考えてもいいが、
解釈において書いていない概念を出来るだけ用いない方がいいとすると上述の論が最もスマートという結論になる
で、そもそも~渡しという名前を使うのが良くないという論もあるが
まあ~渡しと言うのは他言語との比較でも使われるのでそういう意味では
渡すというより共有するということを言っている共有渡しという言葉を使って
JSは共有渡しですよとしておくのが一番良いだろうという主張だ

680:Name_Not_Found
15/06/17 22:04:47.02 .net
URLリンク(stackoverflow.com)
にある、
function PlaySound()
っていうのをコピペして実行してみたのですが、音が鳴りません。
Here is a Plunker
って書いてあるリンクをクリックして実行すると鳴ります。
音を鳴らすには何かコツが必要ですか?

681:Name_Not_Found
15/06/18 06:42:22.48 .net
半熟になったら巻いて最後は弱火な

682:Name_Not_Found
15/06/18 07:09:36.32 .net
>>667
ES6 仕様に書かれていない事を新たな言葉を発明することで説明する行為を独自解釈という
>>666といい、あなたは日本語があやしいから「仕様」という言葉は使わない方がいい
どうしても使いたいなら該当仕様のURLを示しながら仕様の言葉で説明するように工夫した方がいい

683:Name_Not_Found
15/06/18 07:33:34.51 .net
>>668
URLリンク(plnkr.co) のソースをコピペするだけで動いた

684:Name_Not_Found
15/06/18 07:48:12.70 .net
>>670
仕様も人が書いた文章だ
仕様だからといって文言の定義が1から10までされているわけではない
そこを自分なりに解釈しないと文章を読むことはできない
新たに何かを付け加えるのではなく消去法でいくとそういう解釈に到達するということだ
こちらはきちんとここまで散々筋道立てて理を述べたのだから
それに反論するのであればこれ以上こちらに要求するのではなく
今度はそちらが労力を使って反証すべきだ

685:643,660
15/06/18 08:30:30.61 2UvYMnEq.net
>>665
ありがとう、ES6 で hoisting が見つかった
参照渡しについては別の人が触れている通りだけと、話し合いにならなそうだからいいや
一つだけおわせてもらうなら、仕様は言葉通りの意味しかないよ
読む人によって解釈が異なる文書は仕様書とは呼べない
仕様の文言に別の意味を見いだして新たな言葉を発明するから解釈が異なるなんて発想になるんじゃないかな
それでも、表現に揺らぎがあると思うなら該当記述箇所を指摘して厳密な仕様書になるよう働きかけれたらいいと思うよ

686:Name_Not_Found
15/06/18 08:49:56.11 .net
質問でもなんでもないお互いの意見のぶつけ合いならメールか何かでした方がいいんじゃない?
正直、結構前にlowdashキチが来てからこのスレおかしくなる一方に見えるんだが
それ以前はjQueryを使った回答を一部の人が嫌ってるだけで全体としては許容されてた気がする
その後、荒らしが酷くてライブラリ使うなってなってからスレとして機能してないよね(今も荒らされてるからだけど)

687:Name_Not_Found
15/06/18 09:22:27.89 .net
>>671
chromeなら鳴ったが、IE11だと鳴らん。
何でや?

688:Name_Not_Found
15/06/18 09:57:25.30 .net
>>673
ここでの解釈というのは、機能ではなくニュアンスであって、機能に差を出さずいろんな解釈をすることができる
逆に言うとどう解釈されても機能には差は出ないから、文言の定義がされていないとも言える
だから根本的に不毛なやりとりなのだが、何渡しと呼ぶのが適切かという命題自体がJSにとって不毛なので、
あえてその不毛な解釈をしなければならなくなっている
勿論現実的に参照の値渡し等をイメージして仕様書は書かれているでしょというのもわかるし、その視点では賛同するが、
今回はあくまで仕様書に実際に書かれてあることから最も自然に何が導けるのかという視点で自分は正否を述べさせて貰った
ここらへんはもはや仕様書を聖書とした宗教の領域なのでこの辺りでやめておこう

689:Name_Not_Found
15/06/18 13:19:21.75 .net
htmlに画像などを表示していて、それらを別の画像に置き換える場合、
読み込みに数秒くらい掛かったとすると、その間、利用者には、画像が
置き換わっている間の動きが見えてしまいますが、それを防止したいのです。
ある時点で画面の更新を停止して、その間に新しい画像を読み込んで、
完了したら画面の更新を再開するみたいなことは可能でしょうか?
ようするに、スマートに一瞬で画像を置き換えたいのです。

690:Name_Not_Found
15/06/18 13:22:33.34 375JuiDS.net
>>675
HTML Audio - Browser Support
Currently, there are 3 supported file formats for the <audio> element: MP3, Wav, and Ogg:
Browser MP3 Wav Ogg
Internet Explorer YES NO NO
Chrome YES YES YES
Firefox YES YES YES
Safari YES YES NO
Opera YES YES YES

691:Name_Not_Found
15/06/18 13:46:32.85 .net
>>678
親切wwwでもずれてて見づらいww

692:Name_Not_Found
15/06/18 14:18:36.77 .net
>>678
オフコースの歌みたいだな

693:Name_Not_Found
15/06/18 15:57:44.70 .net
>>677
更新先の画像をプリロードさせておけば一瞬で更新できる

694:Name_Not_Found
15/06/18 18:24:10.68 .net
CTRL,ALT,SHIFTを押されたか調べるときに
(e.ctrlKey && keycode === e.keyCode)みたいに調べるコードを見かけますがなぜですか?
(e.ctrlKey)だけじゃダメな理由ってなんですか?

695:Name_Not_Found
15/06/18 19:27:57.99 .net
何故ここの質問者はどこでどう使われてるのかを挙げずに
~みたいなという適当なコードのみで回答を要求するのだろうか?

696:Name_Not_Found
15/06/18 19:42:30.18 .net
わからない奴は答えなくていいんだよ。
質問者にもROM者にも需要ないからね。

697:Name_Not_Found
15/06/18 20:33:58.57 .net
初心者は解決するために何が必要かわからないから情報を小出しにする
出来た人間であれば情報捕捉を求めれば答えるが、経験上、補足する質問者は5%ぐらい

698:Name_Not_Found
15/06/18 20:42:41.91 .net
>>682
if (e.ctrlKey) {if (keycode == e.keyCode) {....}}
と書くより &amp;&amp; を使ってifを減らしたいんじゃないかな。
e.ctrlKeyを調べて終了する処理は無いだろうから。

699:Name_Not_Found
15/06/18 20:48:00.19 .net
& ごときで右往左往している近頃のツーチャンネル。今回は文字エンコードの問題じゃないな。今の中の人は頭悪いんだろうなぁ。

700:Name_Not_Found
15/06/18 20:49:13.00 .net
&
&&

701:Name_Not_Found
15/06/18 20:50:32.28 .net
確認画面を挟むとバグるらしい。ほんまにショボい。

702:Name_Not_Found
15/06/18 21:35:56.56 .net
>>682
> CTRL,ALT,SHIFTを押されたか調べるときに
CTRL,ALT,SHIFTっていうのは、通常は単独で押しても
何の反応もしないものなんだよ。
これらはキーを入力した時の追加情報と考えられる。
例えばCTRLキーを10回連打しても
何も入力されないだろ?
ゲームとかでは、CTRL,ALT,SHIFTを単独でおした時に
何かしらの効果が発生する事があるが、通常のアプリでは
単独で押しても何も反応せず、これらは他のキーと
組み合わせて使うものだから。例えばCTRL+Cとかね。

703:Name_Not_Found
15/06/18 22:59:44.17 .net
>>690
keydownとkeyupでは単独で取れるよ

704:Name_Not_Found
15/06/18 23:38:19.85 .net
単独で取れるかどうかの話じゃない。
単独でとるものなのかどうかという話。
単独で取らないことが多いから、
世の中のコードは単独でとってないことが多い。

705:Name_Not_Found
15/06/19 06:39:30.25 .net
>>692
> 単独で取らないことが多いから、
> 世の中のコードは単独でとってないことが多い。
日本語大丈夫?

706:Name_Not_Found
15/06/19 07:02:33.30 .net
いいえ、だいじょうぶdす

707:Name_Not_Found
15/06/19 07:30:40.99 .net
>>682
[Ctrl] キーは通常、他のキーと組み合わせて使うショートカットキーが多く、衝突の危険性を回避する為、単独では使わない
例えば、[Ctrl] + [C] キーを使っている時に [Ctrl] キー単独で反応すると困る
念のため、付け加えておくが、[Ctrl] キーを単独で使用できない技術的な理由は全くない
当然、[Ctrl] キーを単独で押しても反応しないなんてこともない
他のアプリで [Ctrl] キー単独で押して反応しないものが多いのはそのように作られているから
他機能との衝突を避ける為、[Ctrl] キーを2回連続で押すインターフェースはたまに見かけるが、人によって連続でキーを押す間隔(インターバル)が違うのでユーザビリティが低い
(そういう機能は大抵、ショートカットキーをカスタマイズ可能だから問題ないが)

708:Name_Not_Found
15/06/19 08:20:05.91 .net
それは流石に視野が狭すぎ
ゲームなんかでは立派なキーの1つだよ

709:Name_Not_Found
15/06/19 08:41:51.09 .net
>>696
何にでも例外はあるから全く使わないとは言わない
単独で使うなら衝突を避けるために event.preventDefault() でブラウザのショートカットキーを殺さなければならない
これはユーザビリティを下げる行為だから積極的には使わないというだけ
また、[Alt] キーを殺したら [Alt] + [Tab] も無効となる
ようするに、ユーザビリティを下げても良いと思える場面でのみ使うものだ
制作者のポリシー次第ともいえるが

710:Name_Not_Found
15/06/19 08:41:55.89 .net
<select onchanged= ... >
で同じitemを選択した場合でもイベント発生させる方法が
URLリンク(stackoverflow.com)
にあるようなのですが、最初のAnswerにある
<select onchange="jsFunction()">
 <option value="" disabled selected style="display:none;">Label</option>
 <option value="1">1</option>
 <option value="2">2</option>
 <option value="3">3</option>
</select>
をやってもうまく行きません。何が悪いのでしょうか?

711:Name_Not_Found
15/06/19 09:01:38.75 .net
>>697
急に当たり前のことを長々と語りだしてどうしたの?
結局何が言いたいのか分からん。
お節介かけたいだけか?

712:Name_Not_Found
15/06/19 09:23:24.81 .net
そんな方法はない。
そもそも要素を選択する画面の部分は仕様外のブラックボックスなのだから。
選択されて同じ値なのか、選択がキャンセルされて同じ値なのかも区別できない。
区別したければCustomElementsを使え。

713:Name_Not_Found
15/06/19 10:10:39.85 .net
>>699
>お節介をかける

714:Name_Not_Found
15/06/19 12:41:56.56 .net
google javascript styleでaaa_aa__aaみたいな変数は使ってはいけないのに
google map apiで帰ってくるjsonで使われてるんですがどうしてですか?

715:Name_Not_Found
15/06/19 12:47:40.72 .net
jsonはJavaScriptじゃないから

716:Name_Not_Found
15/06/19 12:49:20.48 vyabglPz.net
初めまして。
最近typescriptのチュートリアル程度を触ったのですが、jsを静的型付け言語として書きたい需要は大きいんでしょうか?動的型付け(js/php/ruby)しか触ったことがないので、静的型付けが便利という実感がわきません。
加えて、スレ違いかもしれませんが、静的型付け言語の利点を実感するためにはどんな言語でどんなプログラムを書いてみるのがいいでしょうか?

717:Name_Not_Found
15/06/19 13:11:11.95 .net
>>704
クラスを使う(作る)ようになるとメリットが分かるようになるよ。
型っていうのは、コメントと同じようなもんだからね。
クラス(型)が多くなって、この変数に入るのは○○型とかいう
コメントを書きたくなったとき。静的型付け言語を使う利点もわかるはず。

718:Name_Not_Found
15/06/19 13:50:09.85 .net
ブラウザが実験的に導入しているプロパティとかを使う場合
var a = window.X | webkitX | mozXみたいに書くじゃないですか
これって正しい順番の書き方ってありますか?
プリフィックス付きのは最後に書いて標準の名前を先頭に書いたほうが良いのですか?
あともしaがwindow.xだとしたら循環参照しませんか?

719:Name_Not_Found
15/06/19 15:23:49.94 .net
>>706
論理演算子の||(or)じゃないか?
ex1 || ex2
って書いた場合、ex1が真相当ならex1、そうでなければex2が返る
良いとか悪いとかじゃない

720:Name_Not_Found
15/06/19 16:51:48.43 .net
>>706
そのプロパティの仕様しらべて自分なりにコード書いてみて、自分の頭で考えて最適化すれば答えはでるんじゃね?
自分の頭で考えないから↓みたいなしょーもない疑問が出てくるんだし
>あともしaがwindow.xだとしたら循環参照しませんか?

721:Name_Not_Found
15/06/19 17:52:20.33 .net
>>707
なるほど、標準の名前を先に書いておくのがいいですね

722:Name_Not_Found
15/06/19 17:56:37.51 vyabglPz.net
>>705
なるほど、ありがとうございます。typescriptを触っていて、yuidocがいらないなーと感じてましたが、それが利点なんですね。クラスを使うようなプログラムを入門書などを探して作ってみようと思います。

723:Name_Not_Found
15/06/19 18:59:07.55 nMHFKVRD.net
>>704
世の中にはIDEの強力な支援がないととてもやっていけないヤツの方が多い
そのために静的型付であることが重要

724:Name_Not_Found
15/06/20 16:30:14.91 .net
<script type="text/javascript">
   window.onload = function () { func(); }
   function func1(a) { alert('func1: a=' + a); }
   function func() {
      var a = 100;
      var fn = func1;
      document.getElementById('button1').addEventListener('click', function () { fn(a) }, false);
      //  fn = null;     
   }
</script>
<input type="button" id="button1" />
これを実行して表示されるボタンをクリックすると、func1が実行出来たのですが、末尾の部分でfnをnullにすると例外が出ました。
つまり addEventListenerでfnを登録してその後でfnの中身が変わると(fn=nullなど)、そのことがaddEventListenerで登録済の
関数fnに影響しているようですが、ということは、var fnの宣言をfunc()内のローカル変数でやっていますが、
これは関数外でグローバル変数として宣言しておく必要があると言う事でしょうか?もしそうなら、ボタンクリックでfunc1が実行出来ているのは
たまたまですか?

725:Name_Not_Found
15/06/20 17:07:04.72 .net
addEventListenerで登録しているのはfnではなくfn(a)する関数でしょ
その関数内のfnはその関数内では定義されていないので外のfn見に行ってるでしょ
だからそうなるの

726:Name_Not_Found
15/06/20 17:23:13.35 .net
レスありがとうございました。
実体が定義されている関数func1()やfunc2()を使って
 document.getElementById('button1').addEventListener('click', function () { func1(a) }, false);
 document.getElementById('button1').addEventListener('mouseenter', function () { func2(a) }, false);
とやればうまく行ったのですが、変数fnを使って
 fn=func1()
 document.getElementById('button1').addEventListener('click', function () { fn(a) }, false);
 fn=func2()
 document.getElementById('button1').addEventListener('mouseenter', function () { fn(a) }, false);
みたいにすると、期待通り動きません。
こういう場合に変数fnを使ってやる方法教えてください。

727:Name_Not_Found
15/06/20 18:39:05.78 .net
setIntervalを同時に複数実行させたいのですが、出来ますか?

728:Name_Not_Found
15/06/20 19:14:34.26 .net
ごめん出来た

729:Name_Not_Found
15/06/20 19:20:23.32 .net
ʕ•ӫ̫͡•ʔ

730:Name_Not_Found
15/06/20 20:11:27.47 .net
誰か714教えてけろ。

731:Name_Not_Found
15/06/20 20:32:07.90 .net
>>711
> 世の中にはIDEの強力な支援がないととてもやっていけないヤツの方が多い
支援があると簡単になるってことですか?

732:Name_Not_Found
15/06/20 20:58:21.31 .net
>>714
こうすればいいケロ。
fn=func1;
document.getElementById('button1').addEventListener('click', (function(fn){return function(){fn(a)}})(fn), false);
fn=func2;
document.getElementById('button1').addEventListener('mouseenter', (function(fn){return function(){fn(a)}})(fn), false);

733:Name_Not_Found
15/06/20 21:23:26.08 .net
>>720
ありがとうございました!できました。あなたはJSの達人ですか!
感謝です!!
教えていただいた構文が全く理解出来ないのですが、勉強するには、
どういうキーワードでググれば良いでしょうか?

734:Name_Not_Found
15/06/20 21:42:30.21 .net
基礎構文と基礎的な修練のレベルだろ。
それなのに勉強する方法まで人に尋ねる気なの?
随分と図々しいな。
本当にやる気あるのか?

735:Name_Not_Found
15/06/20 22:01:08.37 .net
>>721
「javascript addeventlistener 引数を渡す」辺りで調べるケロ。
今回は引数が関数なので若干難しいけど、順を追えば絶対分かるケロ。
あと、>>720は分かりずらいし無駄な部分があるから、こっちに修正したほうがいいかもしれないケロ。
function createHandler(fn){
 return function(){ fn(a); }
}
fn=func1;
document.getElementById('button1').addEventListener('click', createHandler(fn), false);
fn=func2;
document.getElementById('button1').addEventListener('mouseenter', createHandler(fn), false);

736:Name_Not_Found
15/06/20 23:01:45.74 .net
>>714 >>720
なんか回り道しているように見えるが?
本当にやりたい事はこれじゃねーのか?
var fn1 = function () { func1(a) }
document.getElementById('button1').addEventListener('click', fn1, false);
var fn2 = function () { func2(a) }
ddocument.getElementById('button1').addEventListener('mouseenter', fn2, false);

737:Name_Not_Found
15/06/20 23:38:15.54 .net
var O = function() {
this.age = 100;
};
O.prototype.show = function() {
var a = this.age;
var t = function(a) {
console.log(this.age);
console.log(a);
};
t();
};
var o = new O();
o.show();
t()の中でthis.ageの値が使いたいんですがこう書いたらundefinedになりました
どうやってつかうんでしょうか?

738:Name_Not_Found
15/06/20 23:45:22.44 .net
>>725
方法1
O.prototype.show = function() {
var a = this.age;
var that = this; // ← this を別の変数に退避
var t = function() {
console.log(that.age);
console.log(a);
};
t();
};
方法2
O.prototype.show = function() {
var a = this.age;
var t = function() {
console.log(this.age);
console.log(a);
}.bind(this); // ← 関数t の this を外側の this に固定
t();
};
方法3(一部ブラウザ非対応)
O.prototype.show = function() {
var a = this.age;
var t = () => { // ← アロー関数のなかの this は外の this と同じ
console.log(this.age);
console.log(a);
};
t();
};

739:Name_Not_Found
15/06/21 00:54:08.18 .net
>>723
ありがとうございました。この方式でも上手く行きました。感謝です。

740:Name_Not_Found
15/06/21 08:57:50.26 .net
>>712,714
いろいろとちぐはぐな印象があるのだが…。
・グローバル変数を嫌うのにグローバルに func が定義されている
・addEventListener を使うのに window.onload が使われている
・window.onload のハンドラ関数内で関数呼び出しするだけの無意味なコードがある
リスナー関数の第一引数は event で予約されているので、何らかの値を共有したい場合は handleEvent を使うと良い。
URLリンク(jsfiddle.net)

741:Name_Not_Found
15/06/21 16:11:01.45 .net
querySelectorの代に引数のコードをこの質問スレでだいぶ前に見たんですが
w3c見ても第二引数が載ってないんですがこの第二引数ってなんのために使うものですか?

742:Name_Not_Found
15/06/21 16:24:40.74 .net
第二引数なんてないと思うが?
なんかの間違いだろう

743:Name_Not_Found
15/06/21 17:41:57.61


744:ID:???.net



745:Name_Not_Found
15/06/21 20:22:52.69 .net
>>729
W3Cにないのだからあなたの記憶違い

746:Name_Not_Found
15/06/22 00:41:56.99 .net
>>729
そういえばあったね
8年以上前の提案で実装もされてないから忘れちゃっていいと思うよ
URLリンク(www.w3.org)

747:Name_Not_Found
15/06/22 03:13:02.54 .net
querySelectorってブラウザ間の互換性は完璧ですか??
どのブラウザでも同じものが使えるのでしょうか?

748:Name_Not_Found
15/06/22 04:07:55.09 .net
お前は1つ1つのAPI全てここで聞く気なのか?
そんなことは自分で調べろ!!

749:Name_Not_Found
15/06/22 08:16:04.99 .net
↑まさかこういうのも自演か?

750:Name_Not_Found
15/06/22 08:27:25.54 .net
buttonってデフォルトでマウスがボタンの上に来ると色が変わりますよね。
たぶんmouseoverか何かのイベントだと思います。
ところがそのbuttonのclickイベントで自作の関数button_click()を呼び出すように、
addEventListenerすると、そのデフォルトの色が変わる機能が機能しなくなる
ようなのですが、これをデフォルトのように機能させて色を変えたいのですが、
どうすれば良いでしょうか?mouseoverイベントに対して、色を変えるような
関数を自前で実装する必要があるのでしょうか?

751:Name_Not_Found
15/06/22 08:34:00.11 .net
>>737
addEventLidtenerにそんな機能はない
関数内を空にして検証すればわかる

752:Name_Not_Found
15/06/22 08:43:51.45 .net
>>737
再現可能なコードと再現可能なブラウザとバージョンを明らかにしてもらわないと検証しようがない
コードを少しずつ削除して原因を切り分けしたら?

753:Name_Not_Found
15/06/22 09:05:02.87 .net
>>738>>739
レスありがとうございました。
調べてみたら、addEventListenerは関係ありませんでした。お騒がせしました。
しかしながら、mouseover時に色が変わらない現象はまだ解決していません。
<input type="button" id="id1" value="button1" />
これならmouseoverで色が変わるのですが、ボタンの何らかの色属性を設定するとmouseoverで色が変わらない
症状が出ます。これは仕様でしょうか?
<input type="button" id="id2" value="button2" style="border:1px solid red"/> // こうするとmouseoverで色が変わらない
<input type="button" id="id3" value="button3" style="background-color: red" /> // この場合でもmouseoverで色が変わらない
Windows7 IE11 です。

754:Name_Not_Found
15/06/22 09:11:58.01 .net
JavaScirpt関係ないので、ここで打ち切りです。
みんなも答えないように。

755:Name_Not_Found
15/06/22 09:12:24.08 .net
Chromeでも実験してみました。そうすると、Chromeの場合は、mouseoverではbutton背景色は変わりませんが
border色が変化しました。兎に角mouseoverで背景色が変わったり(IE11),border色が変わったり(Chrome)するようです。
しかし、上記例の2番目、3番目のように自分でbuttonの何らかの色属性を設定するとmouseover時に背景色やborder色が変化する
デフォルトの挙動が無くなります。これは仕様でしょうか?

756:Name_Not_Found
15/06/22 11:47:23.68 .net
非対応ブラウザ向けに
if (property in object) {
alert("非対応ブラウザです");
}
〜in〜でチェックする意外に良い方法ありますか?これがベストですか?

757:Name_Not_Found
15/06/22 11:53:09.55 .net
tryで囲む

758:Name_Not_Found
15/06/22 12:59:23.44 .net
>>741
お前みたいな童貞には聞いていない。

759:Name_Not_Found
15/06/22 14:24:47.71 .net
>>740
GCのデフォルトスタイルシートがどうなっているか、はCSSで規定されてない
普通はデフォルトスタイルシートに依存せず、制作者スタイルシートで上書きする
:hover あたりで実装できる
>>741のいうようにJavaScriptの質問ではない(CSSの質問)のでここで質問しないでください
>>745は人格を疑います

760:Name_Not_Found
15/06/22 15:31:39.12 O6vc5bZ4.net
>>711
遅れましたが教えていただいてありがとうございます。やはりIDEの支援を受けられる(受けやすい)というのが大きいんですね。
空いてる時間に少しずつ勉強していこうと思います。

761:Name_Not_Found
15/06/22 16:55:35.14 Etk3KzJI.net
JSで口パクツール作ってみたいんですけど、参考になりそうなサイトや作例ご存じないですか?
Flashならここ URLリンク(allabout.co.jp)
みたいな、そこそこヒントになりそうなの見つかるんですけれども・・・

762:Name_Not_Found
15/06/22 18:10:54.80 .net
口パク?
そんなにアニメーション GIFでいいんじゃねーの?

763:Name_Not_Found
15/06/22 18:31:41.31 Etk3KzJI.net
マイク音に反応して動くやつっすね。有名どころはドッペル。あんな感じの。

764:Name_Not_Found
15/06/22 18:37:04.81 .net
javascript 音声 マイクでぐぐったら1ページ目に答えがでたが?

765:Name_Not_Found
15/06/22 18:44:20.56 Etk3KzJI.net
urlでお願いします

766:Name_Not_Found
15/06/22 19:12:59.62 .net
URLリンク(www.google.com)

767:Name_Not_Found
15/06/22 19:41:21.47 ufubf1pp.net
【やりたいこと】
ブログにオリジナル画像のソーシャルボタンを設置したい。
独自タグを用いずに記事URLと記事タイトルを取得するにはどうすればいいか教えて欲しい
【使ってるブログ】
livedoorブログ
【現状】
ツイートボタンは以下のような形で設置していたのですが…
<a href="URLリンク(twitter.com)【独自タグを利用いてタイトル取得】&amp;url=【独自タグでURLを取得】&via=【Twitterアカウント】">
<img src="【使いたい画像】"></a>
どうもlivedoorブログの独自タグというのがPCでは有効でもスマホになると無効化されてしまうらしく、スマホからだとツイートした際に記事のタイトルやURLが取得されていないようで困ってます…。
独自タグを用いずに個別の記事のタイトルとURLを取得するにはどうすればいいのでしょうか…?

768:Name_Not_Found
15/06/22 20:03:13.32 .net
固有のサービスのことなんてここで聞かれても知らんがな
専用スレで聞けよ
スレリンク(blog板)l50

769:Name_Not_Found
15/06/22 20:16:51.27 .net
Web制作の何でも相談所と勘違いしている質問者があるようだね

770:Name_Not_Found
15/06/22 22:52:56.03 TVawu57t.net
和暦を日付に変換したいのですが
var text = '平成12年3月4日12:34';
var hiduke = text.match(/^平成(\d{1,2})年(\d{1,2})月(\d{1,2})日(\d{1,2}):(\d{2})/);
for(var i = 1; i < 6; i++){
hiduke[i] = parseInt(hiduke[i]);
}
hiduke[1] += 1988;
var date = new Date(hiduke[1],hiduke[2],hiduke[3],hiduke[4],hiduke[5]);
もっとよい方法ありますでしょうか

771:Name_Not_Found
15/06/22 23:05:09.80 .net
>>757
function toDate (string) {
string = /^平成(\d{1,2})年(\d{1,2})月(\d{1,2})日(\d{1,2}):(\d{2})/.exec(string);
return new Date(Number(string[1]) + 1988, string[2], string[3], string[4], string[5]);
}
toDate('平成27年6月22日23:00');

772:757
15/06/22 23:22:54.12 TVawu57t.net
>>758
ありがとうございます勉強になりました。

773:Name_Not_Found
15/06/23 01:17:03.73 V2pHveJI.net
>>755
失礼致しました…;

774:Name_Not_Found
15/06/23 11:47:03.98 .net
var o = document.createElement("div");
for (var i in o) {
if (o.hasOwnProperty(i)) {
console.log(i);
} else {
console.log(false);
}
}
これ全部falseになるのはどうしてですか?

775:Name_Not_Found
15/06/23 13:19:36.07 .net
>>761
プロトタイプ上のプロパティだから
むしろ、true になると思い込んでいる考え方を改めたほうがいい

776:Name_Not_Found
15/06/23 19:44:15.38 .net
DOMのプロパティがプロトタイプ上に実装されたのはBlinkでは最近だぞ?

777:Name_Not_Found
15/06/23 20:57:46.75 .net
DOM ではプロパティの存在位置まで規定されていないから hasOwnProperty に依存すべきではないという事だろう
in 演算子を使うべき

778:Name_Not_Found
15/06/23 22:35:39.73 .net
javascriptなのかjqueryなのかよく分かりませんが、自分で作っているhtmlの中に400px X 300pxくらいの大きさの<div>を作って、その中に例えばyahooのhpを表示させるなんて出来ますか?

779:Name_Not_Found
15/06/23 22:42:17.31 .net
iframe

780:Name_Not_Found
15/06/23 23:11:03.06 .net
>>766
じゃあ、小窓の中にyahooの全体を表示するのではなくて、yahooのhpの特定の<div>部分を小窓に表示させるなんて出来ますか?

781:Name_Not_Found
15/06/23 23:14:58.72 .net
できる

782:Name_Not_Found
15/06/23 23:16:18.36 .net
>>768
やり方をおしえてちょ

783:Name_Not_Found
15/06/23 23:26:45.47 .net
サーバーサイドでHTML取得してパースして該当箇所を抜き出す
サーバーサイドがいじれないならYQLとか使う

784:761
15/06/23 23:33:32.09 .net
console.log("MIN_VALUE" in Number); // true
console.log(Number.hasOwnProperty("MIN_VALUE")); // true
console.log("isNaN" in Number); // true
console.log(Number.hasOwnProperty("MIN_VALUE")); // true
上のは全部trueなのに下のはエラーやtrueやfalseとこれがよくわかりません
var a = 1;
console.log("constructor" in a); // Uncaught TypeError: Cannot use 'in' operator to search for 'constructor'
console.log(a.hasOwnProperty("constructor")); // false
console.log("constructor" in window); // true
console.log(window.hasOwnProperty("constructor")); // false
console.log("constructor" in Number); // true
console.log(Number.hasOwnProperty("constructor")); // false

785:Name_Not_Found
15/06/23 23:48:59.35 .net
>>771
挙動だけ見て同じでないのがおかしいと思う前に仕様書を読む努力をしましょう

786:Name_Not_Found
15/06/24 00:29:07.01 .net
やりながら学べばいいってことよ。その方が目的達成の近道だよとオラの婆ちゃんが言ってたから絶対だ。

787:Name_Not_Found
15/06/24 04:10:57.74 .net
テキストボックスに打った文字をjsを使って指定したファイルに書き込むことってできますか?

788:じゃがりきん
15/06/24 04:25:40.07 mBuo1W/V.net
新作です
評価お願いします><

ブレゼンハムキューブ
URLリンク(jsdo.it)

789:Name_Not_Found
15/06/24 09:43:45.12 .net
for (var i in Number) {
console.log(i);
}
これ何も出力されないのは何でですか?

790:Name_Not_Found
15/06/24 10:37:01.78 .net
各プロパティには列挙可/不可のフラグがあって
ビルトイン系のほぼ全部が列挙不可に設定されているから

791:Name_Not_Found
15/06/24 16:26:06.03 .net
整数のみの加減算にしないとブレゼンハムではないね

792:Name_Not_Found
15/06/24 17:05:35.31 .net
整数のみの加減算になるのは最適化の結果であって
アルゴリズムの目的からすると必ずしもそうでなくてもいい

793:Name_Not_Found
15/06/25 17:27:09.62 .net
m


794:ain.html sub.html があって、mainのほうを最初に開いて、そこで window.open()を使ってsub.htmlを開いた場合、その上にあるbuttonを押すと以下のコマンドを実行するようにしたら、 $("#myID").css("background-color", "yellow"); その結果 sub.htmlにある<div id="myID">の背景が黄色になったのですが、 main.htmlにある<div id="myID">の背景を黄色にするにはどのように書けば良いでしょうか?



795:Name_Not_Found
15/06/25 19:37:43.51 .net
>>780
>>7

796:Name_Not_Found
15/06/25 19:58:37.05 .net
window.openとか今の時代やめたまえ

797:Name_Not_Found
15/06/25 20:11:01.19 .net
>>781
レスありがとうございました。
でも>>7見たのですが、何の事か全く分かりませんでした。
>>781
では、今の時代は何ですか?超初心者なので右も左もわかりません。

798:Name_Not_Found
15/06/25 20:23:50.91 .net
>>783
ライブラリ系の話題は禁止
>>1を全て読み直して

799:Name_Not_Found
15/06/25 20:26:45.58 .net
>>ライブラリ系
って何ですか?

800:Name_Not_Found
15/06/25 20:50:24.72 .net
>>783
例えばPCなら2ウィンドウを並べて見ることができるがスマホだとそうはいかない
PCでさえもユーザーエクスペリエンスが下がる

801:Name_Not_Found
15/06/25 21:05:12.19 .net
>>786
じゃあ今流行りな方法は何ですか?

802:Name_Not_Found
15/06/25 21:46:00.16 .net
ライブラリ許容スレをいっぱい立ててライブラリのお作法のみをなぞることかな?

803:Name_Not_Found
15/06/25 21:54:08.96 qqVgHSni.net
ブログの過去記事をランダムで10件ほどピックアップ表示するのってどうすればいいの?
クリックすると過去記事ランダム表示までは出来たのですが、無作為に10件リスト形式のテキストで表示するのが無理ゲ…。

804:Name_Not_Found
15/06/25 21:56:38.91 .net
>>789
ライブラリ系の話題は禁止
>>1を全て読み直して

805:Name_Not_Found
15/06/25 21:57:05.94 .net
>>788
雑談も禁止
>>1を全て読み直して

806:Name_Not_Found
15/06/25 21:58:12.91 .net
>>786
ユーザーエクスペリエンスの話題は禁止
>>1を全て読み直して

807:Name_Not_Found
15/06/25 22:06:01.78 .net
文章の途中をピックアップするってこと?

808:Name_Not_Found
15/06/25 22:08:29.58 qqVgHSni.net
>>793
過去記事のリンク付きタイトルを「過去記事ピックアップ」みたいなラベル付けてサイドバーに置いておきたい。
ようするに「おすすめ記事」とか「新着記事」とかの中身を過去記事ランダムに変えただけのものを設置したい。
おすすめとか新着とかだと回遊率に歯止めがきそうで…

809:Name_Not_Found
15/06/25 22:10:24.32 .net
>>794
ライブラリ系の話題は禁止
>>1を全て読み直して

810:Name_Not_Found
15/06/25 22:17:44.85 .net
>>795
おまえが仕切る必要はない。アホか。

811:Name_Not_Found
15/06/25 22:19:01.56 .net
ランダムにaタグをappendchildすればえんちゃう

812:Name_Not_Found
15/06/25 22:42:04.47 .net
>>796
テンプレを守る必要はある

813:Name_Not_Found
15/06/25 23:09:26.66 .net
ライブラリの話題は禁止だが=ライブラリ仕様コードを晒すの禁止ではない。
ライブラリ禁止というのは宗教ではなく、荒らし対策という理屈によるものなのだから。
テンプレも絶対にそこに書いてある言葉通りに沿わないといけないというものではない。
我々プログラマという理屈的な人間が手段を目的化させるようなことはあってはいけない。

814:Name_Not_Found
15/06/26 00:55:32.92 .net
その人はテンプレが害悪と言いたいためにすべてに>>1嫁と言ってる人(乱立嵐)だから気にしないでいいよ

815:Name_Not_Found
15/06/26 05:21:18.51 .net
>>799
おまえが仕切るな。

816:Name_Not_Found
15/06/26 06:53:53.89 .net
当初ライブラリ厨が嫌だから分離しろとゴネて
ライブラリスレを立ててテンプレを無理やり変えて押し切ったのが自分だから口出しする責任がある。

817:Name_Not_Found
15/06/26 07:54:16.71 .net
当時関わった者だが、事実を歪曲して他人に命令する傲慢さは持ち合わせてないわ

818:Name_Not_Found
15/06/26 08:25:06.00 .net
なんだかんだ言って当初はjQuery厨が騒いでたけど今は大人しいんだからもういいんじゃね

819:Name_Not_Found
15/06/26 09:03:49.87 .net
>>804
元はlowdash推しの変人が自演回答してて「お前自演してないか」と言われた時にそうだよ、何が悪いってそいつが認めて
lowdashの情報を投下しつづけるbot化
もう面倒だからライブラリ禁止にしようってなった途端
そいつらしき人物がjQueryとlowdashのアピールしまくり、議論が二転三転してスレ機能せず、その後スレ乱立荒らしにって流れじゃなかった?
議論の内容はjQueryは割と広く使われてるから回答に出てくるのはわからないではないけどlowdashとかどこで使われてるんだよwwお前以外lowdash推しのやついねぇよ的な内容だった気がする

820:Name_Not_Found
15/06/26 13:27:42.19 .net
ライブラリの啓蒙()始める前からずっとここで引っ掻き回して遊んでたよ

821:Name_Not_Found
15/06/26 13:47:04.14 .net
>>805
> 議論の内容はjQueryは割と広く使われてるから回答に出てくるのはわからないではないけどlowdashとかどこで使われてるんだよwwお前以外lowdash推しのやついねぇよ的な内容だった気がする
ライブラリに全く触れていない質問にlodashやjQueryの回答をして、「そんなことまでライブラリ使うな」と批判をあびている構図だったと思う
ライブラリ回答者の言い訳は「ライブラリ布教の為に回答してます。ライブラリスレは人が少ないので行きません。」
このスレにいるjQuery回答者もそんな感じ
jQueryに触れられてない質問でもjQueryの回答をする

822:Name_Not_Found
15/06/26 15:03:54.38 .net
jQueryの述語そのままで通信限定のライブラリーを作れば需要はある。
というか2015年6月時点で瀕死のjQueryをそこまでミニマルにすれば延命できる。

823:Name_Not_Found
15/06/26 15:49:15.71 .net
そんな感じだったか
jQueryの普及率的に信者が居たりするのはわからないではないけどlowdash推しのあいつは理解できなかったなぁ
何がそこまでさせるのか

824:Name_Not_Found
15/06/26 18:01:26.22 .net
>>808
メソッドチェーンなのは同じだけど
将来的にはObservableがDOMに来るからjQueryは駆逐される

825:Name_Not_Found
15/06/26 22:05:48.81 .net
じゃあもうそろそろライブラリ解禁でいいですかね。

826:Name_Not_Found
15/06/26 22:08:01.13 .net
>>810
Observableでどうやって、属性を変えたりするの?
jQueryがObservableを取り込んで、
ますます便利で高速になると思うんだけど。

827:Name_Not_Found
15/06/26 22:10:59.17 .net
jQueryの便利な所は、ループが不要になる
セレクタを使った一括適用なんだけどな。
lodashも同じで、ループや比較が必要になるような
コードが半分以下になる。

828:Name_Not_Found
15/06/26 23:53:57.94 .net
オワコン

829:Name_Not_Found
15/06/27 00:04:23.60 .net
まあ、オワコンには誰もやりたがらないメンテ作業が無期限で残されているだろうから、がんばれ。

830:Name_Not_Found
15/06/27 03:31:52.01 .net
jQueryがおkだからマイナーなライブラリの話をする という嵐がいるみたいだからまとめて禁止でいいよ
ライブラリスレにjQueryスレ、あとライブラリ許容の乱立スレ?とム板のスレまであるんだから
ここが禁止のままでも嵐以外は困らない

831:Name_Not_Found
15/06/27 06:16:04.03 .net
ライブラリのリファレンスを参照して答えるような質問でないのなら別にいいでしょ
ライブラリに関する質問がダメなわけであって$を見ただけで過剰反応してはいけない

832:Name_Not_Found
15/06/27 06:22:49.42 .net
まあ禁止されても勝手に書き込むから
関係ないけどなw

833:Name_Not_Found
15/06/27 06:24:12.08 .net
嵐がいなくなったというか、ライブラリの話題が禁止されて
単にこのスレが過疎化しただけというw
質問自体が無いしね。雑談ばっかり。

834:Name_Not_Found
15/06/27 07:24:04.90 .net
もうすぐlodash 3.10リリース
lodash v3.10.0
URLリンク(github.com)
まだChangelogには書かれてないみたい
URLリンク(github.com)

835:Name_Not_Found
15/06/27 07:25:30.22 .net
jQuery 3.0 はまだまだかねぇ。
URLリンク(github.com)

836:Name_Not_Found
15/06/27 08:24:54.38 .net
久しぶりに1年前のスレを見てみたが、こんなに正常なスレだったんだな
vol115からライブラリ嵐の異様さがよくわかる
スレリンク(hp板)

837:Name_Not_Found
15/06/27 09:21:59.24 .net
その時点で大分正常から遠ざかってるように見えるが

838:Name_Not_Found
15/06/27 10:07:04.29 .net
そしてすっかり過疎化してしまった。

839:Name_Not_Found
15/06/27 11:26:12.65 .net
jsでファイルを複数に分けた場合、
それぞれのファイルでc言語で言うところの関数の外で宣言したstatic変数的な変数定義は出来ますか?
つまりそのファイルの中だけでグローバル変数になる。

840:Name_Not_Found
15/06/27 11:45:56.62 .net
nodejs

841:Name_Not_Found
15/06/27 12:43:47.62 .net
>>825
できない気がするけどファイル内全体を即時関数で囲っておいてその中で変数定義すればいいんじゃないかな
そうすれば変数も関数もローカルになるし
普通にグローバル定義したいものはwindow.xxx=function (){}みたいな感じで定義すればできるんじゃないかな

842:Name_Not_Found
15/06/27 13:32:35.12 .net
>>827
>できない気がするけどファイル内全体を即時関数で囲って
レスありがとうございます。
ファイル全体を即時関数で囲った場合、
その中にある関数myfunc(){......}はどうやって呼び出せば良いのでしょうか?
囲う前なら普通に
myfunc();
で実行出来ていたわけですよね。囲った場合の呼び出し方が分かりません。

843:Name_Not_Found
15/06/27 13:48:42.32 .net
>>828
外から呼び出したいものだけは
window.myfunc=function(){}
みたいなで定義しておけば
普通にmyfunc()でいける

844:Name_Not_Found
15/06/27 13:50:12.13 .net
>>828
>その中にある関数myfunc
その関数を外から(他の js ファイルなどから)呼びたい場合は
その即時関数の中で、
即時関数の外で定義された変数にその関数を代入するしかないだろう

845:Name_Not_Found
15/06/27 15:37:02.43 .net
>>828
var globalVar = (function () {
return 'hoge';
}());
(function () {
this.globalVar = 'hoge';
}.call(this));

846:Name_Not_Found
15/06/27 18:37:14.03 .net
普通にブロックスコープとletとvarを使えばいいだけのこと

847:Name_Not_Found
15/06/27 18:38:40.84 .net
>>832
じゃあそれらを使った解決方法を書けよ。
意味もわからず適当な事を言って、自己満足するのはやめなさい。

848:Name_Not_Found
15/06/27 18:53:22.88 .net
(function(global){
global.myfunc=function (){}//グローバルな関数
function myXXX(){}//ローカルな関数
var xyz=200;//ローカル変数
global.abc=5000;//グローバル変数
}(window))

849:Name_Not_Found
15/06/27 19:17:00.47 .net
グローバル変数をなるべく減らすって
考え方は間違っちゃいないけど、
そこまで来たならRequreJSとかを使うべきだろうな。
開発時は細かくファイルを分けて、
リリース時はファイルを結合して
1つにするとか出来るよ。

850:Name_Not_Found
15/06/27 19:32:37.65 .net
>>833
自分が理解できないっていうんなら下手にお伺いを建てるのが普通
他人に回答してほしくないのなら自分が完璧な回答してあげればいいのに
えらく自分勝手だねキミ

851:Name_Not_Found
15/06/27 19:34:48.11 .net
>>836
ほらね。詳細書けと言われたら書けないんだよ。こいつ。
自分が適当な事を書いてるってわかってるんだろうねw

852:Name_Not_Found
15/06/27 19:41:37.54 .net
>>828
素直にRequireJSを使った方がいい。
軽くサンプルを書くと、
[module.js]
define(function() {
 var value = 1;
 function foo() { alert(value) }
 return {
  foo: foo
 }
});
[main.js]
require(['modules'], function(Module) {
 Module.foo()
});
こんな感じで、ファイル内でグローバル相当なvalueを作ったり、
別のファイルからfoo()を呼び出したりできる。

853:Name_Not_Found
15/06/27 19:45:45.14 .net
一応俺がRequreJSを使ってるから、RequireJSといったけど、
Webpackとか言うのもあるらしい。
こっちのほうが優れているように見えるが、普及したのかな?

854:825
15/06/27 20:28:02.21 .net
皆さん、詳しいレスありがとうございます。
いろんな方法を教えて頂いたので一個ずつ試して、自分に合う方法を
見つけたいと思います。

855:Name_Not_Found
15/06/27 20:36:44.85 .net
この板もとりあえずID出すべきだな。

856:Name_Not_Found
15/06/27 21:13:34.87 .net
Browserifyとか

857:Name_Not_Found
15/06/27 21:42:05.40 .net
Browserifyっていうのもあるのか。
RequireJSは、RequireJSとして完成しまくってて
成長してないから、新しいのがほしいんだけど、
将来性がないのも困る。

858:Name_Not_Found
15/06/27 23:30:22.55 .net
webサイトに自分のfacebookページに投稿した内容を取得、
jqueryにて表示したいです。
新着情報のところにfacebookの投稿を取得、表示する感じです。
以前はrssやatomを取得できましたが現在はできず、
graphを利用するしか無いと思うのですが、
feedの取得にはアクセストークンが必要となります。
実際表示させるまではできているのですが、
アクセストークンをそのままコードに書き込むのは
セキュリティ的に問題ある気がするのですが問題ないのでしょうか?
ご指摘と、他によい方法があればご教示ください。
もし質問するのに他に適切な場所があれば誘導をお願いします。

859:Name_Not_Found
15/06/27 23:48:15.31 .net
>>844
アクセストークンの中にはシークレットキーとかいうのも含まれるんだよね?
だれでも見れるJavaScriptの中に埋め込んだらだめじゃないのかな?
サーバー側のアプリ(PHPなど)の中に埋め込んで
取得したものを、動的にHTML生成するって感じだと思う。
そもそも、あなたの情報をあなたが勝手に公開するのは構わないけど、
あなたの情報にアクセスできる方法を、あなた以外に渡す必要はないわけだし。

860:Name_Not_Found
15/06/28 13:59:37.20 .net
URLリンク(stackoverflow.com)

//----------------------------
function Person(){
  this.name = "Peter";
  Person.counter++;
  alert(Person.counter);
}
Person.counter = 0;
var p1 = new Person();
var p2 = new Person();
//----------------------------
なんですが、
 this.name
 Person.counter
が良く分かりません。
newで作ったp1では p1.name で取り出せますが、
Person.nameは見つかりませんでした。
一方、
Person.counterはありますが、
p1.counterは見つかりませんでした。
こういう理解で良いでしょうか?
 newで作成したインスタンスp1ではthis.xxxメンバ変数が作られ、p1.xxxで使える。
 newしなくてもPersonという実体は一個作られる。
 そのメンバ変数はPerson.xxxで扱える。
 Person.counterのcounterっていう変数の宣言は、Person.counter = 0;で初期化と一緒にやっている。
で良いですか?

861:Name_Not_Found
15/06/28 17:16:30.17 .net
>>837
詳細も何も
{
let filelocal_var = hoge
var global_var = fuga
}
ということなだけなんだが
>>832以上に説明することあるか?

862:Name_Not_Found
15/06/28 17:35:20.22 .net
>>847
古い話題より846もお願いします。よろしく。

863:Name_Not_Found
15/06/28 18:05:38.34 .net
>>847
>その中にある関数myfunc
はどうなりましたか?w
その例だけの話しなら即時関数使ってできるんですよ。
そんな答えは求めていません。一周遅れですか。
var global_var = fuga
(function () {
var filelocal_var = hoge
})()

864:Name_Not_Found
15/06/28 18:22:37.22 .net
edinetのxbrlデータを自動取得しようと考えているのですが、
何か良い方法はありませんでしょうか?
抽象的な質問で申し訳ありませんが、お答えいただけますと幸甚です。

865:Name_Not_Found
15/06/28 18:41:15.11 .net
自動的にedinetのxbrlデータを
取得すればいいのでは?

866:Name_Not_Found
15/06/28 21:48:45.30 .net
javascriptって、簡易言語って書いてあるが、全然簡単じゃないよな
javascriptを勉強して5年だが、やっと、日経ソフトウェアに載ってるJavascriptの
記事を読んで理解できるようになった。ここまでくるのに、時間食いすぎた。

867:Name_Not_Found
15/06/28 22:04:54.88 .net
プロが使うものに簡易なものなんてあるわけなかろう?
プロが欲しい機能が搭載されてるってことなんだから。
簡易言語っていうのがあるとすればプロは使わない言語だよ。
あと日経ソフトウェアは初心者向けだからな。
がんばれよ。

868:Name_Not_Found
15/06/28 23:36:29.44 .net
JavaScriptは取っ組みやすいが、奥が深すぎる言語であると思ってる

869:Name_Not_Found
15/06/28 23:38:41.81 .net
それはどんな言語でもそうだ。
奥が浅いのはCOBOLぐらいなもんだろ。

870:Name_Not_Found
15/06/29 04:07:12.16 .net
5年経ってやっとわかってくるのは、JSが奥深いからではない。
日経の記事でそこまで奥深い所を扱ったものはない。むしろJSerなら抑えておきたい基本の部類だ。
良い入門資料が少なく、それまでなんとなくやとりあえずの理解を積み重ねて来た結果そうなるだけ。
オブジェクトは参照型だと説明する、プロトタイプベースを放っておいて継承に突っ込む、
暗黙の型変換について(==からDateのことまで)まとめて説明しない、その他諸々。
結局はECMA仕様書を読むしかない。

871:Name_Not_Found
15/06/29 07:46:08.02 .net
仕様書よんだって、言語仕様に詳しくなるだけ。
それだけじゃ 実用的なアプリは作れない。

872:Name_Not_Found
15/06/29 08:17:50.73 .net
>>852は「作れるようになった」ではなく「理解できるようになった」
理解するために仕様書を勧めるのは間違いではないだろう
5年もかけて理解したのなら勉強法が誤っているとしか思えない

873:Name_Not_Found
15/06/29 11:08:07.76 .net
明らかにネタだからw

874:852
15/06/29 18:41:40.26 .net
現在作って公開してる、webアプリケーションは1つあって201X年から公開してます
uploaderを作りました。使ったのは、
javascript、html5、php、mysqlを使いました。
作った当時は継承やクロージャが理解でなかったので、継承もクロージャ
も使ってなく、自分でもコードが読めず、バグだらけで、今思えば酷い出来してた
2chで晒したときは、「~スレの住民なら3日で作れる」など言われました。

875:Name_Not_Found
15/06/29 18:59:10.86 .net
>>858
ある程度理解したら仕様書読むしか無くね
あのサイ本だって仕様書の内容噛み砕いたようなもんだし

876:Name_Not_Found
15/06/29 19:19:57.34 .net
なんだかんだ言ってここはJSerのたまり場だから安心する
他の質問サイトに行くとJava厨だかC厨だかがクラスだprivateだ
JSはオブジェクト指向言語ではないだなんだと全くJSを理解してない発言が並んで嫌になる
ほんとおまいら最高だわ
誇っていいぞ

877:Name_Not_Found
15/06/29 19:36:09.72 .net
msのtranslater apiを使ってテキストを英語にしたいんですがJavaScriptだけで実装している簡単なサンプルを見つける事が出来ません。どこかに有りませんか?
翻訳さえ出来ればms以外でも構いません。

878:844
15/06/29 19:39:13.03 .net
>>845
遅くなりましたが、ありがとうございました。
phpで表示できるようにしてみます。

879:858
15/06/29 20:15:07.27 YIb7Husk.net
>>861
>858から変わらず、仕様書を勧めているのだが…

880:Name_Not_Found
15/06/29 20:28:04.68 .net
中級者に仕様書を読んで重要な点を1から10まで理解しろというのは無理があるが
5位までは読み取れるはずだ。

881:Name_Not_Found
15/06/29 21:28:40.44 .net
仮に仕様書の内容を100%理解したとして
それはアプリを作るための知識の50%にも満たない。

882:Name_Not_Found
15/06/29 21:39:09.44 .net
>>856は作る以前に理解してない段階だと思うなあ
理解するだけでは作れないけど、理解しなければ作れない
理解は必要条件だよ

883:Name_Not_Found
15/06/29 21:46:03.47 .net
作るために必要な知識は、仕様書に書いてあることじゃない。
仕様書なんて1割程度、ほんの基本さえ知っていれば十分。

884:Name_Not_Found
15/06/29 22:34:04.74 .net
理解できない人に作り方を教える無意味さ

885:Name_Not_Found
15/06/29 23:39:38.01 .net
for内にスクロールイベント置いた場合正常に処理してくれますか?
また、置ける場合forの処理ってどうなるんですか?

886:Name_Not_Found
15/06/30 01:24:02.01 .net
JavaScriptが使えないクライアントは何%ぐらいいるのでしょうか?
・パソコン~%
・ガラケー~%
・スマートフォン~%
って風に答えてくれると嬉しいです。

887:872
15/06/30 02:21:47.93 .net
つか、読者参加型のサイトで、
読者に情報を投稿してもらおうと思っています。
その場合、投稿フォームをJavaScriptだけで作っちゃっていいものなのでしょうか?
たとえば、アマゾンで商品購入のさいにJavaScriptを使ってるけど、
JavaScriptが使えない人用のページも用意されているのでしょうか?

888:Name_Not_Found
15/06/30 03:33:02.35 .net
ブラウザのJavaScriptの機能を、オフにして、
そのサイトを見てみれば?

889:Name_Not_Found
15/06/30 05:10:22.30 .net
情報投稿サイトでX-Requested-With無しなんて俺ならディプロイしない。特にその情報が画像や動画ならJSオフを拾ってあげるなんてあり得ない。
要するにJSオンリーは最低限の必須事項だと思う。もうとっくにそんな時代だと断言できる。

890:Name_Not_Found
15/06/30 05:15:21.47 .net
>>863
おもむろに検索したら本家にコピペしてすぐ動きそうな例があっさりごろごろ見つかった。だから何が疑問なのか分からない。丸投げ?

891:872
15/06/30 05:36:23.12 .net
>>874
了解しました。
>>875
おお、ありがとうございます。
> 要するにJSオンリーは最低限の必須事項だと思う。もうとっくにそんな時代だと断言できる。
この言葉をまってました。

892:Name_Not_Found
15/06/30 05:38:32.20 .net
>>876
本家のサンプルってC#じゃあないの?
JavaScriptのサンプルって本家に無いだろ。

893:Name_Not_Found
15/06/30 07:53:26.81 .net
今やJavaScriptが動かない環境は気にしなくていい。
何故ならそれはデメリットを理解した上で何らかの理由によりあえてOFFにしてる人だから。
勿論あえてJSがOFFだと機能しないように作ることはない。
だがそんなことよりも動くけれど機能が限定されている環境をどう相手するかを考えたほうが有意義。
例えばau以外のフィーチャーフォンは昔からJSが利用可能だが、ES3相当なのと、Canvas等のHTML5周りのAPIは皆使えない。
まあこれは最低レベルの部分を見た話だが、そこまで行かなくとも考慮事項はたくさんある。
なんとかPEで頑張りたいところではある。

894:Name_Not_Found
15/06/30 11:57:17.37 .net
あんまり良い例ではないかも知れませんが、
var obj = {
  data1: [
    { sub11: [1, 2], sub12: [3, 4], },
    { sub21: [5, 6], sub22: [7, 8], },
  ]
}
みたいなobjectが有った時に、
var data1 = obj['data1'];
var sub2X = data1[1];
var sub22 = sub2X['sub22'];
var num8a = sub22[1];           // a
var num8b = obj['data1'][1]['sub22'][1];  // b
aみたいに、変数varを何個も使うのと、bみたいにするのとで、
処理速度に違いなどありますか?

895:Name_Not_Found
15/06/30 12:04:11.64 .net
>>880
同じ階層のプロパティを何度も呼び出すなら変数にキャッシュした a の方が速い
プロパティアクセス演算子はプロトタイプチェーンを辿るので基本的に遅い

896:Name_Not_Found
15/06/30 12:20:28.44 .net
何度も繰り返されてきた議論だが、結論としては最適化が十分に効くと仮定した場合速度差は生じない

897:Name_Not_Found
15/06/30 12:29:54.80 .net
そもそも、速度は実装依存だから実際に計測してみたいとわからない
仕様上は遅い、実装上なら計測するしかない
最適化なんて実装依存だからな

898:Name_Not_Found
15/06/30 12:31:47.68 .net
最近のCPUはアグレッシブに投機やキャッシングするから、
コンパイラが多少違うコードを吐いてもどっちが速いかはわからん。

899:Name_Not_Found
15/06/30 13:19:23.43 .net
CPUもそうだが、ブラウザによって違うし、同じブラウザでもバージョンが異なれば速度も変わる

900:Name_Not_Found
15/06/30 20:22:23.88 .net
CPUレベルで考えたそれこそFirefoxのようなシングルプロセス環境だと、
コンテキストスイッチが発生しない限りで別サイトのコードを巻き込んで最適化が発生する余地もある。
ベンチマークも信頼できなくなる。

901:Name_Not_Found
15/06/30 20:48:25.16 .net
複数のブラウザと異なるバージョンのブラウザを用意して一つ一つ検証するのが面倒だから仕様上、速くなることがわかっているコードは積極的に使うようにしてる
ブラウザがアップデートされる度に検証し直すのは面倒くさくてかなわん

902:Name_Not_Found
15/06/30 21:24:24.42 .net
そういう場面が存在することは分かるが、
少なくとも上の質問はそういうクリティカルな物ではないだろう。
ゲームとかで本当にデータアクセスを高速化しようと思ったら、
最終的に変数やオブジェクトを極力使わずasm.jsのようにArrayBufferをメモリに見立てて


903:利用する形になる。 そういう段階まで行けば確かにエンジンのバージョンによる様々な最適化のかかり具合も重要になってくる。 まあswitch vs if-else程度がギリギリ一般的にどちらがどういう時に高速かを調べられる限界だが。



904:Name_Not_Found
15/07/01 00:03:00.64 .net
質問です
CSSファイル内にjavascriptの記述を書きたい場合、方法ありますか?

905:Name_Not_Found
15/07/01 00:05:35.22 .net
ないし、やったらだめ

906:Name_Not_Found
15/07/01 00:18:57.86 .net
>>889
そういう案もあったが今はCSSで定義した変数をJSからオーバーラップする方向性で進んでる
URLリンク(dev.w3.org)

907:Name_Not_Found
15/07/01 08:25:09.97 .net
lodashの3.10がでてるね。
URLリンク(lodash.com)

908:Name_Not_Found
15/07/01 10:22:05.63 .net
この頻度で更新されるたびに話題にされたらたまったもんじゃないな
URLリンク(github.com)

909:Name_Not_Found
15/07/01 14:26:16.50 .net
lodashの最大の欠点はlodash(_)であるということ。
本来はES7のAbstract Referencesとライブラリのインポートでしたいことである。

910:Name_Not_Found
15/07/01 19:09:52.00 .net
java scriptファイルってwebサーバーに置いたら中身丸見えですよね。
プログラムの中身を盗まれないようにする対策って有りますか?難読化とか出来るのかな?

911:Name_Not_Found
15/07/01 20:05:36.62 .net
サーバサイドで処理しろよ
jsにこだわる必要もない

912:Name_Not_Found
15/07/01 21:11:58.74 .net
>>896
忍者HPの無料サーバーで自作のJSのアプリ作っているのですが、
サーバーサイドっていうのは、この忍者HPでも可能でしょうか?
たぶんダメですよね。

913:Name_Not_Found
15/07/01 21:30:19.30 .net
駄目です

914:Name_Not_Found
15/07/01 21:36:29.37 .net
>>894
> 本来はES7のAbstract Referencesとライブラリのインポートでしたいことである。
まったくもってその通り。
なんでさっさと標準化してしまわないのか?
仕様なんて誰が考えても大差ないようなものなんだから、
github上で一関数ごとにIssue作ってささっと仕様を決めてしまえば、
一ヶ月程度でできあがるはずだろう。
ES7の問題点は仕様が固まるまでに数年もの時間がかかるってことだ

915:Name_Not_Found
15/07/01 21:58:30.48 .net
>>898
やっぱりダメですよね。
無料サーバーでサーバーサイド出来るなんて無いですよね。残念。

916:Name_Not_Found
15/07/01 23:58:17.72 .net
>>895
昔どっかのサイトがjsをわざわざエンティティ化しているの見たことあるけど、
どうせすぐ変換できるから無駄。
Googleのソースみたいに圧縮すれば読む気は失せるけど

917:Name_Not_Found
15/07/02 00:34:35.96 .net
>>901
エンティティ化って何ですか?

918:Name_Not_Found
15/07/02 14:59:47.32 .net
圧縮してあっても殆ど変数名の短縮で
メソッド名とかは割りかし残るから慣れればさほど問題ない

919:Name_Not_Found
15/07/02 23:46:53.92 .net
慣れちゃったのか…

920:Name_Not_Found
15/07/03 09:31:47.36 .net
>>900
いたるところにある

921:Name_Not_Found
15/07/03 12:39:44.91 .net
コード整形ツールを使えばインデント整形できるからな
変数名の短縮は読みづらくなるが、読めなくはない(必要であれば読む)

922:Name_Not_Found
15/07/07 10:44:19.38 .net
スクリプト専門スレなのにすいません。
301リダイレクトで質問なのですが、他に目ぼしいスレがなくて、ここで質問させてください。

トップページは
URLリンク(old-site.com)

URLリンク(new-site.com)

に301リダイレクトをする方法は分かったけど、例えば旧サイトでcategory1にあった物を新サイトで、サイトURL移転と同時にドメイン以下の名称を変えて301で一気に飛ばせないのかな?

こんな感じ↓
URLリンク(old-site.com)

URLリンク(new-site.com)

教えてくれた人にアマゾンギフト券(e-mail)1,000円分を差し上げます。
アマゾンに登録してある事と、先着1名なので、2人目以降はすいません。

このメールに下さい

riengl@00mails.com

923:Name_Not_Found
15/07/07 11:43:23.38 qlgurl5N.net
昨今のブラウザだと循環参照してもリークしないの?

前スレみると決着ついてないんだけど

924:Name_Not_Found
15/07/07 11:45:42.12 7Cb6g2mZ.net
JavaScriptも使って以下のような仕様のページを作りたいです。

①ユーザーがページに来ると、モーダルウィンドウAが出る。
②モーダルウィンドウA上のボタンを押すとウインドウが消え、音楽がループで流れ始める。同時にカウントがはじまる。
③ページ上のボタンを押すと、流れていた音楽が消え、別の短い音楽(チャイム音)が一度流れ、カウントが止まり、モーダルウィンドウBが表示される。
④モーダルウィンドウB上のボタンを押すと、カウントした秒数とそのページのURLの文字列をふくむツイートができる。

このような仕様です。
HTMLとCSSでデザインはできようになったので、今度はJavaScriptを勉強してこのような事ができるページを1枚つくって公開するつもりです。プログラムの学習は初めてではないです。

JavaScriptをひと通りざっと勉強してから作業に入るつもりですが、特にどの部分を勉強すればこのようなページを作れるか、簡単なヒント等をもらえたら嬉しいです。

よろしくお願いします。

925:Name_Not_Found
15/07/07 11:56:42.69 .net
>>909
ウインドウの出し方はいろんな方法が有るのでその辺から試せば?

926:Name_Not_Found
15/07/07 14:01:35.84 7Cb6g2mZ.net
>>910
レスありがとうございます。
Bootstrapを利用するのでモーダルウィンドウはそれを利用するつもりでいますが、
他のウィンドウの出し方も試して検討してみます。

927:Name_Not_Found
15/07/07 20:54:08.81 .net
>>909
それはどこまで行っても「物による」から決着はつかない。
一応ネイティブCGシステムと-JSシステム間のバインディングや、
弱参照ハックによりレガシーなDOM API周りではリークは無くなっているが、
新しいAPIが出る度に例えばAudioBufferがリークしたりというようなことがままある。

928:Name_Not_Found
15/07/07 20:54:35.98 .net
×909
○908

929:Name_Not_Found
15/07/07 22:39:47.08 .net
>>911
> Bootstrapを利用するので

死ね。ここはライブラリの話題は禁止だといっただろ

930:Name_Not_Found
15/07/07 22:41:30.72 .net
>>908
> 昨今のブラウザだと循環参照してもリークしないの?
jQueryを使っている限り、昔のブラウザも含めて問題無いという結論だったはず

931:Name_Not_Found
15/07/07 22:42:25.57 .net
>>914
と童貞がほざいてます。

932:Name_Not_Found
15/07/07 22:54:07.87 .net
angularjs.org 1.4.2リリース
URLリンク(angularjs.org)

933:Name_Not_Found
15/07/08 06:26:38.23 S3u9jPpK.net
>>912
なるほど
メモリ効率的にも使わないほうがいいみたいですね
>>915
jqueryは毎回nullぶち込んでるから当たり前じゃ?

934:Name_Not_Found
15/07/08 18:08:05.18 e8Mh7Wfi.net
>>914
たかがCSSフレームワークに何いってんだこの気違い童貞

935:Name_Not_Found
15/07/08 22:31:28.44 .net
>>918
nullを入れてるからじゃなくて(別の理由で入れている所はもちろんあるが)
クロージャーを使った部分で JavaScriptの外の世界との循環参照にならないように
間に一層かまして、断ち切ってるからだよ。

つまりDOM(JavaScriptの外)とクロージャー(JavaScript)が循環参照にならないように

DOM(JavaScript)とjQuery(DOMの参照にクロージャー使っていない)=問題ない
jQuery(JavaScript)とクロージャー(JavaScript)=問題ない

このようにjQueryが問題になる循環参照を断ち切ってる。

936:Name_Not_Found
15/07/08 22:32:05.44 .net
ここってCSSフレームワークの話題オッケーなんですね。

937:Name_Not_Found
15/07/08 22:38:02.17 .net
オッケーですよ
回答する人がいるかは分かりませんが

938:Name_Not_Found
15/07/09 00:37:16.24 .net
>>920
jQueryもJavaScriptの世界なんだが……

939:Name_Not_Found
15/07/09 00:41:54.13 .net
>>923
はい。だからjQueryは「安全な方法」で実装しているから
問題ないのです。

940:Name_Not_Found
15/07/09 00:45:14.38 .net
なぜ常に安全とわかるのですか?

941:Name_Not_Found
15/07/09 00:46:20.77 .net
>>921
>>1の1行目を読めばおっけーではない事は明らかだけどな

942:Name_Not_Found
15/07/09 01:02:12.48 .net
>>925
横から口出すが、jQueryの循環参照対策は過去ログ参照
スレリンク(hp板:550-番)
明らかにスレ違いの話題だから以降はライブラリスレでやってくれ
スレリンク(hp板)

943:Name_Not_Found
15/07/09 01:16:05.60 .net
>>921
単語が出ただけでOKだと信じる短絡的バカ

944:Name_Not_Found
15/07/09 01:25:10.09 .net
>>921>>919の間抜けな回答をあぶりだす為に答えのわかった質問してるんだろう

945:Name_Not_Found
15/07/09 01:31:12.85 .net
こりゃ次スレも禁止でケテーイだね

946:Name_Not_Found
15/07/09 01:33:34.71 .net
そういうのもいいから、もう仲良く行こうぜ
数年前と違ってどうせいつも決まったメンバーしか来ない過疎スレなんだから

947:Name_Not_Found
15/07/09 02:47:15.09 .net
>>929
自演までするなんて、本当ここ痛い奴多すぎだろ

948:Name_Not_Found
15/07/10 08:29:48.72 .net
また、荒らしが新スレを立ててるね
スレリンク(hp板)

949:Name_Not_Found
15/07/10 20:06:05.70 .net
このページの3つ目のリークモデル(クロスページリーク/DOM挿入順序リーク)で
何がリークするのかいまいち分からないのですが、どなたか分かる人居ますか?
URLリンク(msdn.microsoft.com)(v=vs.85).aspx

それから、このドキュメントは古い(2006.02)のですが、今もこれはリークするのでしょうか?
対象はchromeとFFの最新版だけでいいです。

こちらで試したところ、chromeでは小修正で動かせましたが、リークはしていないように見えました。
ただし docmuent.create("<div onClick='foo()'>") が出来ず、
document.create('div');parentDiv.onclick= と分解したため、
> スクリプトがアタッチされた状態で DOM 要素が作成されることです。
に該当せず、無効化してしまっている可能性があります。
MSDNなのでIEでも試してみましたが、私がIEに不慣れなため、動かせませんでした。

見たところ、子DOM要素が親DOM要素のスコープを保持する必要がある時に起こるようですが、
これが必要となる仕様なんてありましたでしょうか?

950:Name_Not_Found
15/07/10 20:30:19.87 .net
> 私がIEに不慣れなため、動かせませんでした。
え? なんで?

951:Name_Not_Found
15/07/11 04:33:24.52 .net
>>見たところ、子DOM要素が親DOM要素のスコープを保持する必要がある時に起こる
記事とこのスレを100億回読み直せ

子DOM要素が親DOM要素の参照を持つのは当たり前だし、そこに書いてあるのはこのスレの上で議論されたことに過ぎない

952:Name_Not_Found
15/07/11 20:21:31.83 .net
MSDNだろうが個人ブログだろうが、ことJSに関して10年前に書かれた記事の内容が今も通用することなんてほぼない

953:934
15/07/11 23:05:41.24 .net
しかし未だに循環参照はリークするんだろ?
勘違いしている奴が多いと思うが、あれはCから見ればブラウザのバグでしかない。
ルートから辿れないノードに対してDOMとJSHeapを同時にGCすれば済むだけの話だ。
むしろJavaScriptをやるようになってブラウザのポンコツ加減に驚いた。
removeEventListenerだって本来はGCできるがしていない。これも手抜きでしかない。

実装上、自分でremoveした方が速く動く。
だからユーザー側にタイミングを委ねる仕様を残すのはいい。
しかしブラウザが落ちるようなところまで来たら、
低速でも完全性のあるGCを動作させて落ちるのを回避しないとプラットフォームとしては使えない。
JavaScriptを書く連中もそうだが、ブラウザを開発する側も「再起動すればいい」という甘えがある。

954:Name_Not_Found
15/07/12 00:21:36.83 .net
そうですか。
質問どうぞ。

955:Name_Not_Found
15/07/12 00:36:44.61 .net
>>938
今はもうしないって何度も言われてるだろ
しつこい

956:934
15/07/12 01:10:18.52 .net
>>940
それ本当か?
循環参照の話はググレば山ほど出てくるし、記事も最近のも多いから、実際にリークするんだと思うぞ。
JSHeapだけの循環参照は最初からリークしない。
DOMとJSHeap間の循環参照がリークする。(これはGCを別々にやっているから。だから同時にやれば直る。)
よくあるBadCaseとして書かれているごく単純なのは無駄なクロージャを作らなくなったからリークしなくなったらしい。
removeEventListenerなんて最初から要らない仕様にするべき。(DOMをGCしたときに同時にGCすればいいだけ)

ただ、確かに対策は簡単なので、対策されているかもしれないが。
まあいいや、俺の本筋はそこではないので。

957:934
15/07/12 01:11:06.00 .net
934の質問は以下ね。
・DOM挿入順が速度最適(ツリーを完成させてから最後に挿入)の場合は今でもリークするのか?
・親DOMのスコープを子DOMが保持することが仕様として必要なのか?
(仕様としてこれが必要である場合は、今でもリークするし、回避する手段も実装側にはない。
ただ、これはよく知られた速度最適化に反するので、実装だけの問題なら既に修正されている可能性が高い。)

答えられる人が居たらよろしく。

あとついでに、
・chromeのタスクマネージャのJavaScriptメモリも増えず(ずっと20MB(ライブ10MB)程度)、
・chromeのDevToolのProfilesでSnapShotを取っても大して増えず(5MB-10MB程度)、
・外部のProcessExplorerで見たVirtualSizeも800MB程度でほぼ一定なのに、
chromeが落ちるのだが、何かピンと来ることがあれば。
なおOSの仮想メモリは十分に余っている状態。

ある程度の時間は確実に動き、その後のある程度の時間のうちに落ちるので、リークだと見ていたが、
Virtualが800MB程度だから、何かのリソース枯渇かとも思えてきた。ただ、いずれにしてもよく分からない。

これも気長に待つので、答えられる人がいればよろしく。

958:Name_Not_Found
15/07/12 01:39:09.96 .net
オブジェクトをnewして配列に入れていく
処理をするとメモリ使用量がどんどん増えていきます。
やっぱりメモリリークは有るようですね。

959:934
15/07/12 01:52:35.48 .net
>>943
それはGCしてないだけ。

chromeのDevToolのTimelineにあるゴミ箱ボタンを押せば手動でGCを起動できる。
押せば減ると思う。
減らないようなら、ここにソースを晒せば誰かが原因を指摘するかも。

960:Name_Not_Found
15/07/12 01:57:55.26 .net
ちなみにFFなら about:memory でメモリプロファイルが見える。
verboseにすれば1バイト単位で計上してくれる。
そこにGCボタンもある。

IEは使ってないので知らない。

961:Name_Not_Found
15/07/12 02:36:12.87 .net
>>944
こんな感じで再現するよ

var a = [];
while(true) {
  a.push({})
}

すごい勢いでメモリがリークしていく。

962:Name_Not_Found
15/07/12 06:45:33.62 .net
>>946
それはリークではなくて、実際に使っているだけ。

リークというのは934の例を見てくれれば分かるが、
どこからもどうやっても参照できないのにメモリが解放されない場合のことを言う。

てか申し訳ないが、今の君が僕の質問に答えるのは無理だ。
僕の質問に付随する内容として僕が積極的に回答するのはここまでにしておく。
君自身の質問としてなら続ければいいけど、さすがにそれだと無視されると思う。

963:Name_Not_Found
15/07/12 08:02:18.24 .net
>>946
まさかこんなコードじゃないだろうよと思っていたコードがそのまま出てきて、どこから突っ込んでいいのやら…

964:Name_Not_Found
15/07/12 17:25:44.77 .net
>>942
結論から言うとしない。
URLリンク(steps.dodgson.org)

965:Name_Not_Found
15/07/12 19:13:24.98 .net
>>949
ありがとう。
循環参照は全て対策されているということについては了解した。
(ただそれは>>938,941に対する回答だ。>>942に対しての回答もあればよろしく)

一応コメントを残しておく。

> GC つき言語 (JavaScript) のコードと C++ で書かれたコードとの連携は最たる面倒の1つ。 たとえば WebKit の DOM は C++ で実装されており、 C++ のオブジェクトは JavaScript 処理系の GC に追跡されていない。
この部分が擁護的で間違っているが、V8はC++で書かれているので、実際はJavaScript側もC++で扱っている。
言語間で連携する必要なんてない。最初から全部C++だ。
一般的にヒープ内部構造まで仕様で規定することはないので、JavaScriptもそうだとするなら、
コードは全てC++でJavaScriptHeapも好きな構造に出来るので、それが扱いづらいのなら実装が悪いだけ。

> 世代をまたぐだけでも大変なのに、更に言語をまたげなんて無理難題にも程がある。
ここからも筆者が勘違いしている事が分かる。言語は跨がない。

しかし構造からしてV8はDOM以外用にチューニングされている。ブラウザ用ではない。
DOMが最初からあるのなら、DOMとJSHeapは混ぜてしまったほうが実装しやすいはず。
ここら辺は
> ふつうの解決
に書いてあるとおり。

966:Name_Not_Found
15/07/12 19:23:40.14 .net
> V8はC++で書かれているので、実際はJavaScript側もC++で扱っている。
そんなわけないw

例えばRuby実行エンジンはC++で書かれているが
Rubyは当然Rubyだ

967:Name_Not_Found
15/07/12 19:32:59.43 .net
>>950
DOMとES5は別々に仕様が策定されているわけで仕様を実装する立場からしたら、ScriptエンジンとDOMエンジンを分けたくなる気持ちはわかるけどな
あなたのいう理想を実現するなら JavaScript API 関連仕様全てをひっくるめて一つの仕様を策定するところから始めないといけない
ある一つの仕様に変更が加えられるたびに「たった一つの仕様」を全て見直して仕様化し直すコストがかかる

> ここからも筆者が勘違いしている事が分かる。言語は跨がない。
あなたのいう理想は「自分で一から仕様を作って自由に実装できるコード」に限定されているように見える
分化された仕様から実装する場合には効率が悪すぎると思うんだけど、どうだろうね

968:Name_Not_Found
15/07/12 20:02:54.30 .net
>>951
お前は付いて来れていない。

JavaScriptからはJavaScriptHeapを直接扱えない。set/get等ができるだけだ。
当たり前だが一般的にGCが出来る言語はGC部分の直接操作はできない。

オブジェクト志向的説明の方が分かりやすいかもしれない。
JSHeapはJSインタプリタから見るとオブジェクトだ。
つまり、JSHeap内部構造はJSインタプリタからは完全に隠蔽されており、set/get等のメソッドが提供されているだけだ。
JSHeapオブジェクトはC++で記述されており、内部構造も動作も自由に書ける。

これで分からない奴にここで説明しきるのは無理なので、この件についてもここで打ち切る。

969:Name_Not_Found
15/07/12 20:37:54.28 .net
>>952
> DOMとES5は別々に仕様が策定されている
なるほど、そういうことか。了解した。

> 分化された仕様から実装する場合には効率が悪すぎると思うんだけど、どうだろうね
これはその通りだ。
DOMとECMA、ついでにCSSの仕様が非同期で更新されるのなら、
それぞれのコードが干渉しないようにしておかないと面倒になる。
ただ、V8を書く時には最初からDOMもJavaScriptもある程度仕様が固まっていたはず。
そこでDOMを付け足すような構造にするのは、DOMを最初から捨てているように見える。
(Nodeとかだとそれでもいいのだが)
というか、JSオブジェクトはツリー構造を取れるから、DOMも普通にJSHeapに載せられるはず。
逆に、JSHeapも構造を規定されていないし、V8のケースならそれぞれ単品で浮いている感じだから、
C++のヒープ構造をJSHeap側が踏襲する手もあったはず。
なぜわざわざ難しくなるようなアプローチをするのかがよく分からん。(歴史的経緯があるのだろうけど)
コードが混ざるのはまずいが、実行時のHeapは共有で一つでも問題ないと思うのだが。

GCに関しては、「ルートから辿る、遅いけど完全なGC」は今のV8の物より断然簡単に実装できる。
だから実装されていないのが謎だったのだが、
参照カウンタ方式の「速いけど完全にするには難しいGC」を実装しきる方向でやっているというのは分かった。
しかし落ちる間際位は「遅いけど完全なGC」を実行してくれよというのが俺の気持ち。

970:Name_Not_Found
15/07/12 23:34:34.49 .net
昔のIE+ActiveXのメモリリークを不完全に理解した気になったやつらがいまだにC++とjavascriptがーとかいってるのはひどく残念

971:Name_Not_Found
15/07/13 00:34:33.35 .net
>>949
質問者ではござらぬが、このブログがあまりにも凄いのでつい。これたいへんな文章量だすな。分かりやすい上に例示が秀逸。書かれたこのお方を尊敬しますし見つけたあなたにも敬服いたしました

972:Name_Not_Found
15/07/13 00:57:56.91 .net
それは誠でござるか
我もとくと拝見するでござる

973:Name_Not_Found
15/07/13 04:28:19.94 .net
>>950
言語云々というよりV8はあくまでV8内の閉じられた世界だけを管理するもので、
当然組み込み先の他のGCシステムまで介入することはなかった。
汎用的なエンジンだからあまりBlinkに特化するわけにもいかないから、
汎用的な連携APIを用意してマシになったということだ。

また、DOMで子が親を参照するのは当然必要で、parentNodeがまさにそうだ。

974:Name_Not_Found
15/07/13 04:31:42.82 .net
DOMはJSのためだけのものではないし、逆も�


975:ワた然り。 V8もBlinkのためだけのものではないし、Blinkも当然Dartなど 今後他のものとも連携が取れないといけないかもしれないのであまりに密結合にすることはできない。



976:Name_Not_Found
15/07/13 19:49:41.40 .net
>>954
あなたのいうJSHeapとは何?
- オブジェクトのツリー構造
- ブロトタイプチェーン
- スコープチェーン
- DOMのツリー構造
>>958もいってるけど、オブジェクトとDOMでは親を辿るAPIが違う
そもそも、DOM要素ノードはオブジェクトでもあるわけだから同時に2つのheapが発生することは避けられない
ESにはその他にも様々な参照構造があり、それぞれにheapが存在するものと想像する(実際は知らないけど、上記全てを一つのheapで管理するのはどう考えても現実的じゃない)
>>952の指摘でも感じたけど、あなたは実装面には強いけど仕様に明るい方ではないよね
もう少し、仕様についても勉強した方がいいかと

977:Name_Not_Found
15/07/13 21:25:35.32 .net
まあ全部JSでブラウザを作ろうというプロジェクトもあるし~
最近のモダンブラウザはBlink-in-JS構想とかで徐々にDOMをJS化してきてるし~
今日のことが明日通用しない業界だし~
どうでもいいよね~

978:Name_Not_Found
15/07/13 23:51:58.78 .net
>>958
> また、DOMで子が親を参照するのは当然必要で、parentNodeがまさにそうだ。
だから最初から何度も言っているが、
・子DOM要素が親DOM要素の『スコープ』を保持する必要
・スコープ
・スコープ
・スコープ
子DOMが子DOMのスコープ内に親DOMをもつのはparentNodeが有るからこれは必要。
しかし子DOMが親DOMのスコープを保持する(親DOMから何が見えるかを直接知っている)必要があるのか?ということ。
普通は一旦親DOMを参照した後に、その親DOMのスコープを見ればいい。だから直接もつ必要はない。
しかしMSDNでは、
> 動的に作成された 2 つのオブジェクトどうしを一時的にアタッチして子要素から親要素へのスコープを作成するのが基本的なパターンです。
> 後でこの 2 要素のツリーをプライマリ ツリーにアタッチすると、その両方がドキュメントのスコープを継承し、一時オブジェクトがリークします。
つまり、DOMに親子関係が発生した時にそれぞれスコープを作成して、---(A)
プライマリツリーにアタッチした時にこれらは両方とも変更され、---(B)
結果、(A)がリークすると言っている。
これが起きるのは、
・(A)内部に循環参照がある=子DOMのスコープと親DOMのスコープに循環参照がある---(α)
・(B)で差し替えられるのは親DOMのスコープのみ=子DOMが親DOMのスコープを直接保持したままでこれがリーク---(β)
のどちらか。俺は後者だと思っていたからこの質問になっていた。ただ、今から考えれば前者かもしれない。
繰り返しておくが、

○ 子DOMと親DOMに循環参照がある。(parentNode, childNode)
? 子DOMのスコープと親DOMのスコープに循環参照がある。
? 子DOMが親DOMのスコープを保持している。
○ 子DOMが子DOMのスコープ内に親DOMを保持している。(parentNode)

これらは全く別物だ。スコープは「スコープオブジェクト」として別に作った方が実装が楽だから、多分そうなっている。
そしてここでリークすると言っているのはその「スコープオブジェクト」であって、「DOMオブジェクト」ではない。
対策は「一時的なアタッチをなくす=(A)の作成をしない」となっている。
結果的にリークするオブジェクト(A)そのものを作成しないのだから、当然対策できることになる。

979:Name_Not_Found
15/07/13 23:52:34.90 .net
(α)のpatch対策は簡単で、DOMをアタッチする時にそのDOM以下のツリーのスコープオブジェクトを全部GCすればいいだけだ。
ただ、循環参照の対策が出来ているのなら通常のGCで回収できることになるから無駄patchになる。
だから循環参照の対策が根本対策で、こちらを急ぐのが開発方針として妥当で、おそらくこれだろう。

ただ(α)だと書き換えるスコープオブジェクトの数が多く、遅い。
最小限に絞って高速化すると(β)になる。だからこちらを仮定していたのだが、
IEは実際遅いし、循環参照の対策も出来ているのなら、(α)なのかもしれない。
(β)の実装で無理があるともあまり思えないのだが。

もう一度繰り返すと、(>>942)
> ・DOM挿入順が速度最適(ツリーを完成させてから最後に挿入)の場合は今でもリークするのか?
> ・親DOMのスコープを子DOMが保持することが仕様として必要なのか?
俺は後者の仕様はないと思っているし、従って前者も対策されており、リークはないと見ている。
だから、これが間違っていそうなら指摘よろしく。
対象はchromeとFFの共に最新版だけでいい。

980:Name_Not_Found
15/07/13 23:57:19.86 .net
>>958,959
見る限りV8のDOMはおまけだ。ただ、そういう用途があるのかはよく分からない。
ブラウザから離れるのなら、最初からnative(exe)が使える。サーバーサイドは基本的にこれだ。
スクリプトの方が運用が楽だし、スレッド起動できるから今は速いわけだが、
exeをスレッド起動できる仕組みが出来ればスクリプトエンジンは全部抹殺されても不思議ではない。
(DLLの動的『指定』とか)
もちろん速いスクリプトエンジン自体は需要はあるし、JITならさほど遅くもないから、こちらに賭けるという選択だとも見える。

しかしNodeはC->JavaScriptは呼べるが、逆はできない。つまり本体はCで、JavaScriptをブラウザ/WEB用APIとして使う方向だ。
nativeが使える状況で速度至上主義なら、C系以外の選択肢は事実上無い。だからNodeの選択は妥当だ。
もちろんNode自体を動かすためにV8が必要だとしても、若干ここら辺に違和感を感じるのは事実だ。(統一感がない)
そもそも速い共通バイナリならJavaでよかったのだが、chromeはそれも外した。(NPAPIの廃止)
Javaについては他に問題がありすぎるようではあるが。

なお、密結合にはならない。
元々1つの物(DOM)を、2箇所(Blink/V8)から管理するからおかしいことになっている。
見る限りDOMとJSのオブジェクトは相似形だから、同じHeapで同居できるはず。
だから、Blink/V8/JSHeapと分離し、BlinkとV8内部には個別のHeapを持たず、全部JSHeapに突っ込めばいい。
wrapperというコピーが無くなるので、メモリ使用量は減る。
GCはすべてJSHeapに任せられる。単一で内部的にツリーを構成できているから、
「GCされないために云々」という無駄コードを全て捨てられ、プログラムとしては綺麗になる。
ただ、各エンジンとHeapが粗結合になるので、どうしても動作が遅くなる。
(Readはpublic(というか直接ポインタアクセスで動的保護無し)、
Writeはprivateという指定が出来ればいいのだが、これができる言語は多分無い)
だから高速エンジン制作者には不評だろうけど。
とはいえ、Mozillaがやろうとして失敗したようだから、何か他にも問題があるのだとは思う。

981:Name_Not_Found
15/07/13 23:59:43.55 .net
>>960
> あなたのいうJSHeapとは何?
JavaScriptのHeapと書くと長いから、JSHeapと書いているだけ。
ただこの質問は君にはプログラミングセンスがないことを示している。
君には理解不能だろうけど。

> DOM要素ノードはオブジェクトでもあるわけだから同時に2つのheapが発生することは避けられない
何故?そんなことはあり得ない。例えばPCのデータはHDDで全てまかなえている。
やり方次第だ。無理に纏めるのは効率が悪いが、同じ型、同じ物を別々に扱うのはもっと効率が悪い。
localStrageだってkey/value型しかないが、やり方次第でどうとでもなる。そういうものだ。
実際にDOM.jsは動いているんだろ?だったら少なくともJSHeapに突っ込んでもなんとかなるんだよ。

> あなたは実装面には強いけど仕様に明るい方ではないよね
これはその通り。JavaScript歴は半年だからね。
ただそれ以上に君にはプログラマーとしてのスキルがないよね。

> もう少し、仕様についても勉強した方がいいかと
何故?俺はGM使いで、だからJavaScriptを使っているだけだ。
今現在で一通り、やりたいことは書けるようになった。
俺がブラウザを作るのなら仕様を一通り読む必要があるが、その予定はない。
その程度でグダグダ言うなと言うのなら、無視してくれて構わない。

982:Name_Not_Found
15/07/14 00:03:30.93 .net
>>960
君は何のために俺に対してレスを付けているのだ?
俺に対して文句を言いたいだけか?それならいくらでも言えばいいが、無駄だから今後は無視させてもらう。

俺は今、chromeが勝手に落ちる現象に遭遇して困っている。
>>942に書いたとおり、DevToolには現れないが、確かに安定して落ちるので何か原因がある。
だからそれに関する手がかりになりそうな奴にはレスを付ける。
958,959に関しては、俺に対して何かしら情報をくれようとしているのだから、こちらもそれなりに返す。
960に関してはどう返せばこちらの実になるか分からないし、それ以前にどう返して欲しいかも分からない。

仕様を勉強してない奴は黙れというのなら、
仕様を与えられても実装できない君みたいなエセプログラマはもっと黙るべきだ。
仕様は聞けば済む話だが、スキル/センスがないのはここでいくらやりとりしても解決できる話ではない。

君は俺より実装面で弱いという自覚があるようだが、ならば何故その実装面の話に低レベルな横槍を入れるのだ?
質問案件に対し、知っている奴が分かる範囲で気が向いたら答えるのが質問スレの普通のやり方だ。
君のレスは誰のためにも何のためにもならない。

初心者用スレとして維持したいのであれば、俺は「ECMAScriptデス4」に移動してもいい。
俺にレスをくれている奴らの多数決でいい。

> DOM要素ノードはオブジェクトでもあるわけだから同時に2つのheapが発生することは避けられない
Dom.jsでも読めよドアホ。
もう少し、自分が至らないことについて自覚した方がいいかと


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch