[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/05 16:44 / Filesize : 199 KB / Number-of Response : 969
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

JavaScriptスレ



1 名前:デフォルトの名無しさん [2011/08/26(金) 13:32:13.80 ]
ないようなので立ててみました
初心者から上級者まで気軽にどうぞ

テンプレは今後決めていってください

関連スレ
★★Java質問・相談スレッド147★★
hibari.2ch.net/test/read.cgi/tech/1312958339/

Eclipse統合M31【Java/C++/Ruby/Python/Perl】
hibari.2ch.net/test/read.cgi/tech/1295886572/

596 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 16:08:52.81 ]
nodeやってる人はhatenaとかtwitter界隈に多いってだけだろ。
それに日本だとまだまだJSに対する言語的な偏見が多いからなー。

597 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 22:31:53.45 ]
2chが過疎ってるだけだと思う

598 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 11:51:29.56 ]
2chが過疎ってるというか、使用者が分散してるな

599 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 12:14:40.11 ]
2ちゃんなんて初心者しかいないし盛り上がれないよ
悪いけどこんなところで情報交換なんてするつもりもない

600 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 15:54:35.08 ]
初心者っぽい書き込みだな。

601 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 14:22:45.70 ]
nodeはサーバサイド専用スレあるよ。まあ盛り上がってないけど。
2ちゃんねるにはどうせろくな情報ないし問題ないでしょ。

602 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 14:50:03.43 ]
昔の2chならギークな人も一部居たりはしたけど今はあんまり居ないからな。
今の2chはそれなりのレベルの人が初心者に教えるためにあるようなもんだし。
初心者はまだNodeをしようって感じでもないからな。

603 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 15:17:35.67 ]
>>600
勘に触ったか初心者君。事実だから。

604 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 15:28:03.08 ]
2chじゃロクな情報が入らないのは昔から。

本気でやるなら、ユーザーグループに入るなり、
海外のブログ読み漁ったりしないとどうにもならんでしょ。



605 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 15:49:04.05 ]
>>603
いやぜんぜん。単なる感想だ。

606 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 16:02:23.03 ]
>>603
必死になるなよ
情弱で低能なのを隠そうとしても哀れなだけだぞ

607 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 00:03:29.06 ]
お、おう

608 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:48:08.40 ]
もうこのスレ要らないよね

609 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 16:30:26.02 ]
そうだ、削除依頼を出そう。

610 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:39:00.89 ]
圧縮ツールでコンパイルするのが主流になるんだろか

もうさ、HTML・CSS・JS全部コンパイルして
ブラウザバイトコードに変換したれ

611 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:56:41.93 ]
NaClって知ってる?

612 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 17:13:05.42 ]
JSやHTMLがコンパイルされてるの?それ
コンパイルされたCやC++とJSとでやりとりするものだと思ってた。JSはコンパイルされてなくて。
https://developers.google.com/native-client/overview?hl=ja
の画像を見ただけの判断だけど

613 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 17:16:16.31 ]
NaClはネイティブコードにコンパイルされてることと
それを実行するサンドボックス(ジャンプ命令とかをひっかけて安全にする)がミソ

614 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 17:26:17.98 ]
chromeのサンドボックス内のプラグインと同じ?たとえばflashプラグインとjsもお互いに何か投げ合えるよね



615 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 17:31:54.25 ]
NaClじゃ全くだめだろう


616 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 17:39:16.79 ]
こっちが面白そう
webos-goodies.jp/archives/is_google_dart_a_new_javascript.html

617 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:05:00.03 ]
NaClはベンダー独自実装だからな

618 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:21:16.20 ]
サイ本買おうか悩んでるんだけど、最新第6版は日本語訳ないのがなあ……
やっぱ英語で読むべき?みんなはどうしてる?

619 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:29:37.48 ]
欲しいなら両方買えば?

620 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:43:06.98 ]
俺が最近買ったからきっとしばらくしたら第6版でるyo


621 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 17:14:07.21 ]
>>618
英語読むのを躊躇するような人は迷わず日本語版買った方がいい。
補完情報は他で手に入れればいい。全文英語で読む苦労を考えれば、
よい補完情報(英語のものも含む)を集める苦労は大した事ない。

622 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 20:14:10.97 ]
2chは有用な情報が少ないから暇人しか来ない・・

623 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 11:24:15.59 ]
口開けて情報待ってる奴は、何を見ても情報だとは気づかない。

624 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 13:15:22.81 ]
argumentsのプロパティの一部が使えなくなるそうですが無名関数の再帰とかはどうするんですか?
再帰したい場合は関数に名前を付ける方向?



625 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 13:33:55.01 ]
方向。
var f = function f2() {
setTimeout(f2,1000);
console.log(Date.now());
};

console.log(f2); // ReferenceError

626 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 13:48:53.66 ]
関数名を付ける方向なんですね

627 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 14:30:54.51 ]
どうしてもstrict modeで無名再帰がしたいなら不動点コンビネータ使えば?

628 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 14:49:03.41 ]
違うだろ。無名関数はarguments.calleegが使える

629 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 19:08:13.48 ]
爺w

630 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 22:22:23.80 ]
> 無名関数はarguments.calleegが使える
使えません。

631 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 22:51:42.89 ]
jQueryに関する質問です。
作業時間の推移を折れ線グラフで表示するプログラムを作成したいのですが、
y軸に何時間何分何秒という値を表示する方法はあるのでしょうか?

632 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 23:18:59.88 ]
> y軸に何時間何分何秒という値を表示する方法
以外のできている部分の動作するコードでも貼ってくれないと
大雑把過ぎてなんとも

633 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 08:32:38.55 ]
ブラウザ内での表示でしょ。Web制作板で。
JQueryと一緒に使えるplotライブラリいっぱいあるよ。flotとか。

634 名前:デフォルトの名無しさん [2012/02/02(木) 20:49:51.10 ]
教えてください。
ActiveXコントロールのプロパティ(PropertyA)に値を設定するところで
IE8標準モードまでは普通に動作するけどIE9標準モードでは
異常値を設定すると例外がキャッチできないです。(例外にならない値なら正常に動作)

try
{
sampleControl.PropertyA = document.getElementById( "PropertyA" ).value;
}
catch(e)
{
alert("PropertyAで例外発生");
}

で、プロパティに値を設定するところの記述を下記のように変更したら意図通りに動いたのですが
これがJavaScriptの書き方として正しいのかがわかりません。
sampleControl.PropertyA(document.getElementById( "PropertyA" ).value);

どなたか、何かご存知ないですか?



635 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 21:36:50.89 ]
Web制作版に行けよ

636 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 21:42:36.12 ]
>>635
そうします。

637 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 02:16:18.06 ]
このスレの存在意義が云々かんぬん

638 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 02:36:11.35 ]
web以外で使わんからな

639 名前:デフォルトの名無しさん [2012/02/03(金) 03:09:25.02 ]
cmd.exe呼び出さずに済む分バッチ作るのに便利だったりするけどな

640 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 07:53:07.65 ]
.batに埋め込みはよくやるなあ

641 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 20:26:21.47 ]
JScriptだし!

642 名前:デフォルトの名無しさん [2012/02/05(日) 13:21:13.42 ]
質問です

A〜Gの一文字をランダムで表示し、F5を押すと更新するプログラムを作りました。
これを、F5を押さずに所定時間(例えば5秒)経ったら自動更新するようにしたいのですが、
どう書けばいいのでしょうか?
当方初心者で行き詰ってしまい質問させていただきました。
教えていただけると助かります。

ちなみに、F5で更新するプログラム↓↓

<p style="font-size:1000%">
<script language="javascript">
<!--
var txt = new Array();
txt[0]="A";
txt[1]="B";
txt[2]="C";
txt[3]="D";
txt[4]="E";
txt[5]="F";
txt[6]="G";
mmax = 7; //メッセージの行数を数字で
txtno = Math.floor(Math.random() * mmax);
document.write(txt[txtno]);
//-->
</script>
</p>

643 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 13:39:20.23 ]
>>642
HTMLに埋め込んでいるんだよね?

644 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 13:51:21.51 ]
最近はJavaScript(Ajax)やHTMLだけを駆使して作ったものをリッチクライアントと言うのか?



645 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 13:56:50.58 ]
>>642
関数化してWindow.SetTimerじゃダメ?

646 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 14:03:36.55 ]
>>643
はい、HTMLに埋め込んでいます

647 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 14:05:48.59 ]
Web制作板の話題だな。

648 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 14:14:16.14 ]
>>646
HTMLの<HEAD>と</HEAD>の間に、
<META HTTP-EQUIV="Refresh" CONTENT="5">
を埋め込む


649 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 14:17:00.62 ]
>>642
板違い
www.htmq.com/js/location_reload.shtml

650 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 14:28:12.54 ]
>>648
できましたー!ありがとうございます
勉強して使わせていただきます

>>645
ありがとうございます
ググってみましたが例文が少なくて自分で作れませんでした・・・

>>647,649
すみません、リンク先の方法も勉強させていただきます

651 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 14:37:09.17 ]
>>650
<!--と//-->の間に書いた処理を
function hoge() {と}で囲む。
document.write(txt[txtno]);
の次に、
setTimeout('hoge()',5000);
をいれる。


652 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 14:53:18.16 ]
>>651
それやったら <title> とか必要なものまで消える

653 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 16:32:03.80 ]
これでどう?
<html><head>
<script language="javascript">
<!--
var txt = "ABCDEFG";
mmax = txt.length; //メッセージの行数を数字で
function hoge() {
txtno = Math.floor(Math.random() * mmax);
document.getElementById("text").innerHTML = txt[txtno];
timerID = setTimeout("hoge()", 1000);
}
window.onload = function(){
hoge();
}
//-->
</script>
</head>
<body>
<p style="font-size:1000%">
<span id="text"></span></body>
</p>
</html>


654 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:05:25.43 ]
>>653
動作は問題ないが、タグの対応関係がおかしかったり、非推奨属性を使ってたり、onloadにhogeを代入すれば良かったり...
解決後に延々とレスしても仕方ないからこの辺で



655 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:15:39.88 ]
>>654
ありがと、後は調べて直す

656 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:37:25.37 ]
質問させてくださいー。
picasaのアルバムからapiで画像情報を取得して、
1枚画像をランダム表示させたいと考えています。

jsonp形式でアルバム情報を読む込むところまではわかったのですが、
その中から画像情報を個別に取得し、ランダムで表示させる〜
ところでつまっています。

下記のjsonp形式のデータからどこを引っ張ってくればいいか
わかる方いらしたら教えてください!!><
https://picasaweb.google.com/data/feed/api/user/113370727965830303581/album/HDRZMuzeumWojskaPolskiego?alt=json-in-script&callback=getPhoto




657 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 02:41:09.98 ]
>>656
例えば、
https://lh5.googleusercontent.com/-8ODYDyaeYo8/Tw4D3-yHKiI/AAAAAAAAMYc/tRXYCM7yWpE/IMG_3309%252520-%252520Aladin%25252CSubtle%25252CRustic-Zmniejsz-1024.jpg
とか、IMG_*.jpgが目的のファイルで、
https://lh5.googleusercontent.com/-8ODYDyaeYo8/Tw4D3-yHKiI/AAAAAAAAMYc/tRXYCM7yWpE/s72/IMG_3309%252520-%252520Aladin%25252CSubtle%25252CRustic-Zmniejsz-1024.jpg
みたいに違うサイズのやつは目的のファイルの前に「/s72/」とかがついてるっぽい

658 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:01:21.80 ]
media$group":{"media$content":[{"url":"https://lh5.googleusercon(略
が本体のところで、他はthumbnailとかtitleとかだね。

659 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 11:13:48.99 ]
HTML側でリストから選択
選択されたものに対応するクラスを生成ってのやりたいんですけど
これってswitchでいっこいっこ対処するしかないんでしょうか
phpでいうnew $objName()みたいなことができないかと

660 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 12:25:43.73 ]
var a = "F";
function F() {};
F.prototype.log = function () {console.log(arguments);};
new window[a]()

こんな感じ?
なんかもっとましな方法あったと思うけど忘れた
誰か補足するだろう


661 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 12:29:00.43 ]
と思ったけど内容的にもWeb作成板いけって内容だな
+ JavaScript の質問用スレッド vol.97 +
toro.2ch.net/test/read.cgi/hp/1327750531/

662 名前:デフォルトの名無しさん [2012/02/17(金) 02:46:26.66 ]
>>596
> それに日本だとまだまだJSに対する言語的な偏見が多いからなー。

むしろ英語圏のほうがJavaScriptクソクソ言われまくってるって。
だいたい、「JavaScriptは根本的な問題を抱えている」とDartを作り始めたのはもとより、
Native Client作ってるのもJavaScript嫌いな連中が多くて
JavaScripter達としばしば喧嘩状態になってるぜ。Emscripten遅すぎだろゴルァとか

ジャップのほうがよっぽど、乗るしかないこのHTML5にって感じで無批判で従順ですね。ええ。
一番目立つはてなあたりがJavaScriptが主言語のウェブ屋だらけなせいかもしらんが。

いずれにしても、推進するにせよ批判するにせよ
海外のがパワーとダイナミズムがあるのは如何ともしがたい。

663 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 02:51:28.16 ]
> むしろ英語圏のほうがJavaScriptクソクソ言われまくってるって。

聞いたこと無いな。

RubyがCoffeeScriptに変更すると聞いて
ひんしゅく買ってたことなら知ってるがw


664 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 03:30:32.35 ]
javascriptとネイティブコードの速度を比較したサイトってないかな?
ググって最初の方に出た英語のサイトは見たんだけど、もっと色々見てみたい。




665 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 05:05:15.26 ]
そんな比較に何の意味があるんだ

666 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 06:46:03.94 ]
>>664
V8とJaegarMonkeyだけでChakraやJavaScriptCoreやCarakanとかはないが一応
attractivechaos.github.com/plb/

667 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:13:41.51 ]
>>662
Javascript遅いってどんだけ無知なんだw

668 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:28:28.65 ]
いやそういう話じゃなくてね

669 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:50:39.74 ]
Javascriptは言語としてはかなりまともな部類。
文句が多いのはブラウザ上の実行環境で、
主にAPIの設計とブラウザ間の非互換性。

670 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:46:01.97 ]
それもあるけどうんこなイディオムが広まりすぎたっていうのもあるって
パーフェクトJSには書いてたな

まぁ確かにWebにはうんこな書き方の情報たくさん転がってるし否定はしないがw
言語はいいとしても誤解されすぎた言語だよなぁ

671 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:58:05.44 ]
strictモードがないと使い物にならないのはガチ

672 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 20:26:25.54 ]
この世にまともな言語なんて存在しない
まともになれる可能性があるのもLispくらい あとは全部糞

673 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:00:45.36 ]
歴史的事実をねじ曲げてまともな言語としようとする理由がわからんわ

674 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:30:23.31 ]
その歴史的事実とやらを具体的に語ってみたら?



675 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:50:11.20 ]
JavaScriptはマイクロソフトが
DHTMLを使って広告を配信する目的で作った。

関数しかない簡易的な言語だったが
それを無理やりオブジェクト指向とか言い始めた。

676 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:56:43.03 ]
はあ?
どこの星の話?

677 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:03:01.54 ]
MSが作ってるのはネスケが作ったJSをパクったJScriptだからな
作った企業も違うしなー

ほんとどこの星だよw


678 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:21:00.14 ]
オブジェクト指向の意味も分かってない

679 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:23:33.84 ]
MSちがw

680 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:49:28.19 ]
>JavaScriptの登場初期は、ブラウザベンダー間で言語仕様の独自拡張が行われていたため、ブラウザ間の互換性が極めて低かった。

これが糞だった一番の原因。あとは1月が0だったりとかトンデモな仕様がいくつか散見される

681 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:18:43.23 ]
1月は普通0だろ。

682 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:33:00.36 ]
ブラウザ間の差異はまぁMS死ねで片付くとして
言語的な仕様でトンデモな仕様ってそんなにあるっけ?
classがないとかは抜きで


683 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:48:00.33 ]
ローカルスコープ変数は関数ローカルしかない
arrayの型が弱い
with氏ね

684 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:48:55.47 ]
>>682
使ってはいけない構文とかが解説本に載っている言語は少ないぞw



685 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:50:49.89 ]
;の代わりの改行氏ね

686 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 00:16:27.46 ]
>>683
型が弱いってObjectと然程かわらんって事?
まぁ実際そうだけどそれが何か悪いの?
スコープも別にそんなとんでも仕様でもないだろ

改行で;が補完云々とかはたしかに面倒くさい仕様だな


687 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 00:46:40.91 ]
>>686
クイズです。
argumentsは配列ですか?
可変引数と配列どちらを渡されても、可変個引数として処理する関数はどう書くでしょう?




688 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:06:52.56 ]
べつにプロトタイプベースなのは、とんでもじゃないだろ。
ブロックごとにスコープが作られない、ってのも、スコープは関数によってのみ
作られると明確なルールがあるだけ。むしろ関数がネストできないのに、スコープは
ネストするCのほうが奇妙な仕様、と言えなくもない。

Bad Partsが嫌ならJSLint使えば良い。

689 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:13:32.87 ]
>>687
argumentsは配列ではない
arguments使えばいいだろ

690 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:18:00.03 ]
ところで、「可変引数と配列どちらを渡されても、可変個引数として処理」はBad Partsじゃないの?


691 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:21:27.16 ]
最近JavaScriptから離れてて、また勉強したいから、良ソースコードを教えてくれ
なるべく数千行レベルの軽いやつを頼む

692 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:23:32.34 ]
>>691
質問スレに行きなよ

693 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:24:30.32 ]
>>687
クイズです。
JavaScriptにArray型はありますか?

694 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:35:39.36 ]
オブジェクトのレングスとかキーとかさっと取得できるメソッドとかプロパティを
初めから用意しとけよとか小言は一杯出てくるな



695 名前:664 mailto:sage [2012/02/18(土) 01:36:35.14 ]
>>666
サンクス!スゲー参考になる。
これ見るとV8はかなりネイティブコードに近い速度でびびるな。
その内事前コンパイルしたものと遜色ない速度になるんだろうね。楽しみだ。


696 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 01:46:13.52 ]
>>688
JQueryなどのライブラリで、グローバル空間を汚染しないために、
Objectの中や関数の中で初期化コードを記述するバッドノウハウが連発されてる。

697 名前:664 mailto:sage [2012/02/18(土) 01:47:54.58 ]
あと、パターンマッチングでPerlが断トツで速いのはさすがだぜ。
これは単にライブラリの出来の問題だけど、そういうのも大事だよね。

698 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 07:38:44.74 ]
>>696
var a {
 init : function () {},
 b : function () {}
};
こういうコード?
Objectオブジェクトの事なのかobjectの事なのかわからん

ちょっと前(ES3)迄だとundefinedとかがひどかったな
上書きできるってなんだよって思うわ


699 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 08:40:39.10 ]
>>696
こういうコード?なぜこれがバッドノウハウ?

(function () {
 var undefined;
)();

700 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 09:42:35.06 ]
>>699
たぶん>>696はブロックスコープがないことにイライラしてるんだろうね
だからといってバッドノウハウ呼ばわりはやりすぎだけど


701 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 09:46:21.90 ]
ES6準拠のletとconstがはやく実装されますように・・・

702 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 10:26:44.01 ]
>>700
Array型がないことにもバッドノウハウ呼ばわりしそうだね。
バッドノウハウ呼ばわりはやりすぎに同意。

703 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 10:32:16.14 ]
というか、どう見てもECMAScriptスレの話題だろ
何でこのスレで議論になってるのかさっぱりだ

704 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 10:57:24.85 ]
住み分けなんてずっと曖昧なままやってきただろ
どう見たらそんな風に思えるんだ



705 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 13:03:58.26 ]
>住み分けなんてずっと曖昧

じゃあこのスレいらないじゃん
ecmaスレに統一しろよ

706 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 14:25:39.22 ]
ecmaはecmaだろ

707 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 15:29:40.06 ]
むしろecmaがいらね

708 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 17:18:46.02 ]
acme

709 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 17:25:49.67 ]
いやw ecmaはいるだろw
こういう認識こそがJavaScriptが糞と言われる原因じゃないのか?

お前が書いてるscriptは本当にJavaScriptか?

710 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 17:33:09.64 ]
つ JScript

711 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 17:48:26.85 ]
JavaScriptとECNAScriptって何か違うの?

712 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 18:03:04.74 ]
ジャバスクって呼ぶ奴死滅すればいいのに

713 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 18:09:38.74 ]
> ECNAScript
はつみみです

714 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 18:19:17.33 ]
スクミズネコミミと聞いて



715 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:00:13.01 ]
スクミズネコミミょぅι゛ょと聞いて

716 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 20:14:19.70 ]
俺はウサミミの方がいい

717 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:05:09.92 ]
>>699
ただの即時関数パターンだよねw

718 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:17:49.64 ]
即時関数パターンは、引数と戻り値が使えるから
ブロックよりもわかりやすいコードが書けたりするよ。

var ret = (function (value) {
 return value+1;
)(hogehoge_value);

更に発展形でプライベートメソッドと
パブリックメソッドをもったオブジェクトも作れるよ。

var My = (function (msg) {
 function add() { return 'hello '; }
 function get() { return add(msg); }

 return { get: get }; //getのみ公開
)('world');

console.log(My.get());

ブロックよりも、柔軟で多くのことが出来るパターン。

719 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:18:56.51 ]
varでグローバル空間汚染する例かよw

720 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:23:55.34 ]
汚染しないように書けばいいだけだろ、

そもそも汚染するコード書いたらダメなのか?

function hoge() {}

これも汚染するって分かってる?
このスレは関数1つ書くこともできないのか、

721 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:25:24.94 ]
なお>>718のようなのは、
「JavaScriptパターン 優れたアプリケーションのための作法」にのってます

722 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:32:41.30 ]
別に関数宣言する必要性ってないからなー
毎日JSには書いてるけど、ここ2,3年関数宣言した覚えがない

723 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:34:34.63 ]
それはダメ人間の例ですか?

724 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:43:16.04 ]
>>720
汚染しないためにはもうひと囲み必要だから問題なんだろ。



725 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:18:15.42 ]
var hoge = function hoge() {};
と書くのは個人的に許せない。冗長だろ。

726 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:20:20.73 ]
>>724
なぜ関数で括るのが問題なの?

727 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:28:32.76 ]
>>725
関数式と関数宣言はちょっとだけ違うのよ

728 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:44:48.69 ]
とくにJScript (5.8以前)はESの仕様通りになってない

729 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 00:10:55.53 ]
ESのどのバージョンだよ?

730 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 00:52:49.57 ]
無名関数は排除される方向

731 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 01:30:49.48 ]
>>730
お前そんな事思ってるの?
バカだなぁw

732 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 02:00:48.80 ]
>>731
俺の妄想を書いたわけじゃないんだがw英語勉強しようねw

733 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 03:31:32.86 ]
FunctionExpressionのIdentifierを気にせず書きたいのはヤマヤマなんだが
IE8までが消滅してくれないと面倒な話が色々と出てきて萎える

スマートフォン環境だけで使うコードでは気兼ねなく使ってるけど

734 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 08:43:27.81 ]
>>731
何が言いたいの?
英語?



735 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 08:45:29.56 ]
>>733
気にする必要はないだろ。


736 名前:デフォルトの名無しさん [2012/02/19(日) 11:43:20.49 ]
IE9で、
右クリックメニューから呼び出す使い方をしたとき、
ドキュメントをオープンしたあと、
external.menuArguments.document.clear()
とやると、エラーになったり、ならなかったりするんですけど、
この違いはなにが由来なんでしょう?。
またエラーにならないクリアの仕方はあるでしょうか。

737 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 13:42:23.44 ]
>>735
なぜ?

738 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 14:18:32.51 ]
関数でラップする書き方否定してる奴はただの老害だから早く引退して!><

739 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 15:39:44.39 ]
>>738
じゃあ、お前は代わりにどうするの?

740 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 16:10:06.63 ]
>>739
代わりに?は?

741 名前:738 mailto:sage [2012/02/19(日) 16:16:48.08 ]
>>739
(・З・)?

742 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 16:50:53.73 ]
ラップしないと汁が回りに飛び散るので、
ラップして、チンがプラクティス。

743 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 17:09:30.03 ]
関数でラップする書き方に問題はない

744 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 17:17:41.66 ]
>>718
前半は意味ないだろ、それどころか有害



745 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:37:38.00 ]
>>744
ぷっ。初心者ですか?
オライリー本にも乗ってるやり方なのにね

即時関数になってるから、プライベート変数が使える。
ローカル変数になるから、速度も早くなる。

4.5.1には即時関数のパラメータ というタイトルで
ブラウザ以外でのコードの相互運用性の向上について書いてあるね。
4.5.2には即時関数からの戻り値というタイトルで開設されてるね。

詳細知りたければ、勉強しろってことさ。
お前は初心者なのだからさ、勉強しないで文句だけ言ってたらダメだよw

746 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:39:19.52 ]
>>745
おまえは勘違いしてる
前半には意味がない

747 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:40:42.27 ]
即時関数をキチンと解ってない奴が>>718を書いたのが悪い

748 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:47:39.03 ]
意味がない理由を述べよ

749 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:48:37.56 ]
数値に1を足すだけのコードに何か意味があるとでも?

って答えが返ってきたら、こいつは馬鹿確定だ。
サンプルに実用的何かを求めるな。

それを使って何が出来るかを考える
頭すら無い。

750 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:49:50.48 ]
var counter = function (seed) {
 return function () {
  return seed++;
 }
}(1);

せめてこんな感じの書いておけよ



751 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:50:19.76 ]
var ret = hogehoge_value + 1;

752 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:51:32.34 ]
>>751
バカ確定しちゃったなw

753 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:52:22.33 ]
自分の頭で考えられない儲登場
即時実行関数は代用なんだから正当な方法を用意したほうがいいじゃないの?
って意見は当然出る。しかしどっちが老害かと。自覚ないんだろうな。

754 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:54:15.08 ]
即時実行関数はそれはそれで便利なもの。
即時実行関数のうち一部はブロックなので代用できるが、
引数とか戻り値が明確という利点はブロックでは表現できない。



755 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:55:35.77 ]
>>752

756 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:56:59.37 ]
むしろ、ブロックが関数の代用ではないのか?

本来ブロックは関数に出来るはず。
なぜ関数にしないのか。

一回しか使わないから? 関数の中でしか使わない関数だから?
そういうどうでもいい理由で関数から
ブロックに変更するのはおかしいよね。

757 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 18:58:52.11 ]
書くのめんどーだろ

758 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:01:39.14 ]
>>753
自分の基準でしか考えられない老害登場。
「代用」という単語の背景に、暗に自分の経験を
仮定していることに気付いていない、真の老害。

759 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:01:40.79 ]
やたらコードを書くのではなく、
コード自信にやっていることを語らせるべき。

よくあるこんなコードを他の言語だとどう書き換えるか。

function() {
 //○○の処理
 ・・・長いコード・・・
 
 //△△の処理
 ・・・長いコード・・・

 //□□の処理
 ・・・長いコード・・・
}


760 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:03:21.67 ]
コードが長いんだから関数にすべき

function ○○() {
 ・・・長いコード・・・
} 
function △△() {
 ・・・長いコード・・・
}
function □□() {
 ・・・長いコード・・・
}
function hoge() {
 ○○();
 △△();
 □□();
}

761 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:05:36.97 ]
>>760の欠点は、○○、△△、□□のスコープが広がってしまっていること

JavaScriptならこう書けます。
function hoge() {
 (function ○○() {
  ・・・長いコード・・・
 }());
 
 (function △△() {
  ・・・長いコード・・・
 }());

 (function □□() {
  ・・・長いコード・・・
 }());
}

762 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:06:03.28 ]
>>758
ただの言葉遊びなら他所でやってくれないか

763 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:07:47.70 ]
もちろん、即時関数は関数なのでこう書けます。

function hoge() {
 var ret1 = (function ○○() {
  ・・・長いコード・・・
 }());
 
 var ret2 = (function △△(value) {
  ・・・長いコード・・・
 }(ret1));

 var ret3 = (function □□(value) {
  ・・・長いコード・・・
 }(ret2));
}


764 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:07:55.66 ]
>>762
早く引退すればw



765 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:08:35.23 ]
>>761
長いコードなんだろ、hogeの見通し悪くて読む気になれん

766 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:09:57.45 ]
>>764
老害の意味わかってる?

767 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:10:01.78 ]
もしhogeの中があまりにも長くなって
分けたくなった時でも、リファクタリングは簡単です。

function △△(value) {
 ・・・長いコード・・・
}

function hoge() {
 var ret1 = (function ○○() {
  ・・・長いコード・・・
 }());

 var ret2 = △△(ret1);

 var ret3 = (function □□(value) {
  ・・・長いコード・・・
 }(ret2));
}




768 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:11:11.23 ]
>>767
リファクタ簡単、はいいけど
その形だと粒度が整ってなくてキモチワルイ

769 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:11:30.54 ]
>>764
ただの言葉遊びなら他所でやってくれないか

770 名前:764 mailto:sage [2012/02/19(日) 19:13:39.26 ]
>>766
ただの言葉遊びなら他所でやってくれないか?

771 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:13:45.77 ]
スコープを広げたくなければ関数冒頭で定義しましょう


function hoge() {
 function ○○() {
  ・・・長いコード・・・
 }

 function △△(value) {
  ・・・長いコード・・・
 }

 function □□(value) {
  ・・・長いコード・・・
 }

 var ret1 = ○○();
 var ret2 = △△(ret1);
 var ret3 = □□(ret3);
}



772 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:16:15.72 ]
出てきた中なら
>>760>>771>>771の上下逆順
あたりがいいな

773 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:16:53.14 ]
hoge関数が長いことが気持ち悪いならこうしましょう。
先程の例には即時関数はなくなってましたが、ここで即時関数復活です。

var hoge = (function() {
 function ○○() {
  ・・・長いコード・・・
 }

 function △△(value) {
  ・・・長いコード・・・
 }

 function □□(value) {
  ・・・長いコード・・・
 }

 return function () {
  var ret1 = ○○();
  var ret2 = △△(ret1);
  var ret3 = □□(ret3);
 }
}());

774 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:16:59.14 ]
Javascriptのブロックって他の言語のブロックのように扱えないだろ
スコープに過ぎないものをファーストオブジェクトである関数と比較する時点で
何かおかしいな



775 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:18:48.83 ]
(function(){})()
より
{}
の方が楽だろ?returnが使いたい時は関数がいいが
(function(){
"use strict";
})()
とかのスコープだけなら{}でいい

776 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:19:28.91 ]
>>773
上までのサンプルとhogeの位置違う

777 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:22:18.35 ]
ここまで来るとオブジェクトに変更することも簡単ですね?

var HOGE = (function() {
 function ○○() {
  ・・・長いコード・・・
 }

 function △△(value) {
  ・・・長いコード・・・
 }

 function □□(value) {
  ・・・長いコード・・・
 }

 function process() {
  var ret1 = ○○();
  var ret2 = △△(ret1);
  var ret3 = □□(ret3);
 }

 return {
  process: process
 }
}());

HOGE.process();

778 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:24:57.26 ]
オブジェクトだから他に拡張もできます。

var HOGE = (function() {
 var state = 1; //ローカル変数です

 function ○○() {
  ・・・長いコード・・・
 }

 function △△(value) {
  ・・・長いコード・・・
 }

 function □□(value) {
  ・・・長いコード・・・
 }

 function process() {
  var ret1 = ○○();
  var ret2 = △△(ret1);
  var ret3 = □□(ret3);
 }

 function getState() {
  return state;
 }
 return {
  process: process,
  getState: getState,
  tag: 123 //オブジェクトなので単なる値も保持できます
 }
}());

779 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:26:56.03 ]
このように即時関数があると、
ただの関数からオブジェクトまでの拡張が
段階的にスムーズに容易に行えます。


780 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:27:50.70 ]
バカ相手にこんなに丁寧に説明してやること無いのにw

781 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:28:41.50 ]
その一方、クラスベース言語ではメソッド引き上げとアクセシビリティ変更だけで済むのであった

782 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:28:48.17 ]
ちなみに、「JavaScriptパターン」の
5.4 モジュールパターン で
解説されていることはこんな内容です。

783 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:32:30.96 ]
var ret = hogehoge_value + 1;
で問題ない

784 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:32:48.90 ]
>>781
いいたいのは、即時関数が本来あるべき姿で、
ブロックはその亜流であるということ
引数や戻り値の概念がない時点で、即時関数の劣化版。



785 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:33:56.99 ]
>>784
だから>>774なんじゃないかと書いたのだが

786 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:36:10.42 ]
ブロックを使いたい時ってのは、
本当は関数を使いたい時なんだよね。

それができない、または関数にすると
大袈裟になりすぎるから、ブロックで代用するだけで。

ちっちゃい関数? ブロックで代用?
だめだめ、ちっちゃい関数は、その場に
ちっちゃい関数として埋め込こもう!
大きくなったら、そのときに少しづつ変更する。

それができるのがJavaScript

787 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:39:05.95 ]
大は小を兼ねる、が常にいいわけじゃないだろ
ブロックスコープを目的にしてるんなら、ブロックスコープで書かれた方がシンプルで見やすく書きやすい上にその意図も伝わる

788 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:43:25.85 ]
ブロックスコープを使いたいだけってことはあまりない。

普通は、ブロックに対して何かの引数を渡して、
ブロックを抜けた時に何かの値が変わる。

だけど、ブロックではその引数と戻り値が明確にはならない。
その意図が伝わらない。

789 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:49:01.10 ]
if, for, while 内はブロックスコープ欲しいけどな。

790 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:50:44.88 ]
ブロックスコープを使いたいときに、引数と戻り値という概念の出番はないよ
前提に結論先取りの我田引水してたらそりゃ結論は変わらんよ

791 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:50:50.47 ]
いやだからw
今、全てのライブラリで>>775が使われてるからw
信者はこれだからめんどくさいw
無名関数否定なんか初めから誰もしてないだろw

792 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 19:55:22.67 ]
jQueryを見たがこうなってるぞ

(function( window, undefined ) {

})( window );

793 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 20:27:55.45 ]
>ブロックスコープを使いたいときに、引数と戻り値という概念の出番はないよ

老害。

794 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 20:30:06.19 ]
>>793
痴呆のエースさんちーす



795 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 20:32:44.92 ]
>>794
ちーす

796 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 20:38:34.08 ]
>>795
前みたいなキレのあるボケまた見せてくださいよ

797 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 20:44:40.93 ]
ブロックスコープの有用性は誰も否定していない
ブロックスコープがなく即時関数を使うことの是非が問われてるんだろ
それを仕様というか、バッドノウハウというかは個人の好き嫌いだから結論が出るはずがない
俺としてはあるがままを受け入れられず、バッドノウハウ呼ばわりする人はこのスレにいる必要はないと思うがな

798 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:02:22.53 ]
敬虔な信者以外は去れ!

799 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:10:45.00 ]
ブロックスコープとか無い物ねだりしても仕方がない


800 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:12:43.04 ]
JavaScript では何もかもオブジェクトなのを忘れんな。
基本型にオブジェクトを用意してるのも体裁の為。
関数のスコープも実体は (内部的な) Call オブジェクト。
正規表現も、日付も、配列も、必要なくても皆オブジェクト。
だからブロックスコープなんて言い出す輩は悔い改めると良いよ。

801 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:15:51.68 ]
とんでも理論入りました!さすが先輩

802 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:17:49.98 ]
>>800
最終行だけ理解不能なのだが…。

803 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:27:48.06 ]
JavaScriptではブロックスコープを
(function() {
}())

と書くだけ文字数が長い以外のデメリットはないよ。

804 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:28:47.55 ]
ちょっと荒れてるみたいだけど疑問に思ったから流れを読まず質問

C++とかだと、whileループの内側のスコープに一時利用変数を宣言して
そのループ内からしかアクセスできないようにできるよね?

こういう一時変数はJSだとwhileの内外でスコープが同じだからできない
再帰関数でスコープを作る方法で機能的には代用できるけど
末尾再帰の最適化が保証されてないからwhile文より遅くなる

……っていう話がJSのブロックとスコープへの批判だと思ってたんだが違うの?
俺の勘違いかも知れないからできれば間違ってるところを教えてほしい



805 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:32:51.15 ]
>>804
間違ってるのは、入信してないところかな

806 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:33:45.79 ]
>>803
それでwhileループを書いてみてくれないか

807 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:42:56.75 ]
>>806
こ、こうかしら…。

while (function(repeat) {
if (some_condition) repeat = false;
return repeat;
}(true)) { }

808 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:46:55.64 ]
俺の腹筋返せw

809 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:22:23.56 ]
うぉおお、スコープの理解が完全に間違ってたことが判明した!!
ifやwhileはローカルスコープあると思ってたあああ
道理でイミフな謎のバグがでるわけだorz

810 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:23:02.92 ]
for (i=0;i < 10;i++)(function (num) {

})(i);

そう言えばこんな風に書く人は本スレにいたね


811 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:26:29.95 ]
JSとか最近触ったけど可読性がクソということだけは理解できた

812 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:27:53.56 ]
>>811
それはない

813 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:29:28.52 ]
>>810
ものっそい低速になりそうだな

814 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:31:36.69 ]
>>809
普通に書いていれば、ローカルスコープの内外の
変数名を一緒にしたりしないから問題が起きたことがないな。

>>810
それはクロージャーを作る必要があるから
そうしていただけ。



815 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:32:02.99 ]
ループは普通にループで書けばよろしい。

816 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:35:15.23 ]
>>807がじわじわくるw

817 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:43:18.11 ]
>>806
> それでwhileループを書いてみてくれないか
じゃあここらで模範解答

while (condition) {
 ・・・
}

これでよい。 即時関数使ってないって? それ必要なの?
俺は必要になったことがないけど、もし本当に必要ならこうすれば良い。
これはどうしても使えといったから使っただけで、俺なら使わん。

(function() {

while (condition) {
 ・・・
}

}())

818 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:24:25.98 ]
>>797
こっちこそ老害。
今そうなっているからそれでいいのだと主張してる。

819 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:26:29.10 ]
ろう がい らう― 0【老害】
企業や政治の指導者層の高齢化が進み,円滑な世代の交代が行われず,組織の若返りがはばまれる状態。

DAIJIRIN Third Edition

820 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:39:33.71 ]
>>652
> 今そうなっているからそれでいいのだと主張してる。
そんなことは主張してない
仕様は常に更新されるべきだ

821 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:45:47.21 ]
>>818
代替手段のない即時関数をバッドノウハウ扱いする理想主義的意見が否定されてるんじゃないの?

822 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:49:00.32 ]
>>821
代替手段あるだろw
おまえは>>817で書くのか

823 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:53:37.90 ]
>>817 は、周回ごとのスコープはできていない。

824 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:55:22.00 ]
周回ごとのスコープ作ったら駄目だろw



825 名前:821 mailto:sage [2012/02/20(月) 00:00:08.25 ]
>>822
ごめん、わかりにくい書き方だった
件の主はブロックスコープの代替手段として提案された即時関数がバッドノウハウと主張してる
ES5には関数スコープしかないんだから関数スコープで代替するしかないのに「ブロックスコープを使うべき、即時関数はバッドノウハウだ」と主張してる
彼の中では関数スコープ自体が受け入れられないんだと思うよ
そんなに嫌ならこんなところで主張してないでES.nextで策定予定のletがちゃんと定義されるように議論に参加すればいいのにね

826 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:06:46.79 ]
>>824
え?ブロックスコープのある言語では周回ごとのスコープになるやん。

827 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:10:07.05 ]
彼はバッドノウハウの意味わかってるのかな?
即時関数がバッドノウハウなら即時関数に代わるグッドノウハウがなくてはならない
全部が全部バッドノウハウならそれはもうノウハウの問題じゃない

828 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:18:08.41 ]
いや別に本当はああ書きたい/書けるべきなのに、現状代替案としてこう書かざるを得ない
というのを指してバッドノウハウという表現は、おかしくはないと思うけど

829 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:18:12.74 ]
>>826
その論拠は?

830 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:33:27.13 ]
>【bad know-how】ソフトウェアなどを使いこなすために、ストレスを感じながらも
>しぶしぶ覚えなければならないようなノウハウ。高林哲による造語。氏によると、
>バッドノウハウは、複雑な設定を「奥が深い」として有難がってしまうマニア独特
>の感性によってはびこるという。

これだとちょっと違う気がするな。


>バッドノウハウは、ソフトウェアの複雑怪奇な仕様が歴史的に引き ずられ、根本
>的な改善は行われないまま、そのノウハウが文書によっ て受け継がれることに
>よって蓄積が進行する。

これだとまさにバッドノウハウ。


ただ、let使うのはなんか気が進まない

831 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:34:32.39 ]
>>823
> >>817 は、周回ごとのスコープはできていない。
ん?

ブロックスコープがある言語の場合、
while(cond) {
 int a=0;
 b++;
}

aはwhileの中に閉じ込められて、
bはwhileの外を参照するよね?

(function() {
 var a=0; //同じだよね?
while (condition) {
 //var a=0; //ここでやってもいい
 b++; //同じくスコープの外
 ・・・
}

}())


832 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:35:53.30 ]
>>829
論拠?試してみれば?

833 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:40:46.11 ]
(function() {

while (condition) {
 var a=0; //こっちしかダメだったねw
 b++; //同じくスコープの外
 ・・・
}

}())



834 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:41:43.02 ]
>>831
それは流石にピントズレてるだろ
>>810>>814に答え書いてあるだろ



835 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:42:11.59 ]
>>832
ゴマかすなよw

836 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:42:37.97 ]
(function() {
var i=0; //こっちのパターンと勘違いしたw
for (var i=0; i<length; i++) {
 var a=0;
 b++;
 ・・・
}

}())


837 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:42:50.32 ]
>>831
前者の場合、変数 a は、(記号は同じでも) 周回ごとに異なる変数。

>>833
JavaScripit の場合、var a は while の内でも外でも同じ。

>>835
え?

838 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:43:18.56 ]
>>834
なぜ?

839 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:44:52.00 ]
>>837

> >>833
> JavaScripit の場合、var a は while の内でも外でも同じ。

うん、でも重要な点はvarの位置ではなく、

1.var aのスコープは閉じており、
2.ループの最初で0を代入しているから

実質同じ事になっているとこうこと

840 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:46:56.18 ]
>>839
それはこの場合の本質には関係ない

841 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:47:48.54 ]
>>832
Javascriptの<ような>言語じゃなきゃ
周回ごとにスコープ出来てるか否かという概念自体がなりたたないだろ

842 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:47:57.94 ]
>>840
お前の本質とは、
全く同じ動きをして
代替として使えること以上に
重要なことなのか?

843 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:49:11.23 ]
>>842
クロージャ。コレでわからなきゃ半年ROMってろ

844 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:49:20.53 ]
>>839
ブロックスコープのある言語だと、while 内で宣言した変数は、
(参照を格納しておくのでもない限り) 別の周回で参照できない、
という意味で >>823>>826



845 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:50:58.51 ]
>>843
即時関数も、クロージャーなんだけどw

無名クロージャーを定義と共にすぐに実行することを
即時関数(パターン)と読んでるだけ

846 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:51:40.29 ]
>>845
それと>>839のどこに関係があるんだ

847 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:52:46.52 ]
>>844
うん。だから最初に値を初期化することまで含めて

「 (function(){}())と初期化 」を使った
ブロックの実装例だよ。

848 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:53:38.60 ]
>>846
馬鹿?

(function() {

}())

↑これが無名クロージャの即時実行

849 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:54:03.37 ]
>>844
そうじゃない言語もあるよね

850 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:54:27.24 ]
C言語か?

851 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:54:32.56 ]
>>848
話つながってないことに気づけよ

852 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:56:35.68 ]
>>851
勝手に切るな。
どこから別の話なんだよw

853 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:56:36.09 ]
クロージャっていまだによくわからん
これって無効には出来ないの?

854 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:57:02.92 ]
今まさに、バッドノウハウが生み出されている、その瞬間であります!!



855 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:57:25.80 ]
>>853
関数の外に持っていけばいいよw


856 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:58:09.23 ]
ちなみに即時関数は
オライリー本のJavaScriptによるでも
紹介されている、グッドノウハウです。

857 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:59:29.77 ]
オライリー本に紹介されるとグッドノウハウになるそうです\(^o^)/

858 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:00:40.05 ]
オライリー本にはバッドパーツとして
紹介されているものもありますよ。

即時関数はもちろんグッドですがw

859 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:02:41.34 ]
>>844
具体的に何の言語か教えて欲しい

>>817
周回スコープが出来てない事が指摘されてるのにクロージャとか関係ない話を続けているのはなぜ?


860 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:02:51.61 ]
>>856
>>830
下の典型例

861 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:02:54.35 ]
>>858
おまえは何もわかってない

バッドノウハウとは、使い方の問題なんだよ
存在の良し悪しじゃないんだ

862 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:05:50.26 ]
>>859
クロージャにスコープは関係ありありだろ
ちなみに俺は817とかじゃないが

863 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:08:02.57 ]
>>858
どの本です?
www.amazon.co.jp/s/ref=nb_sb_noss?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Dstripbooks&field-keywords=JavaScript%82%C9%82%E6%82%E9&x=6&y=16

864 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:08:52.00 ]
>>859

843 名前:デフォルトの名無しさん[sage] 投稿日:2012/02/20(月) 00:49:11.23
>>842
クロージャ。コレでわからなきゃ半年ROMってろ



865 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:09:44.48 ]
>>863
www.amazon.co.jp/dp/4873114888

866 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:18:41.61 ]
ほかの言語じゃあまり見られないような議論だな
やっぱり自由度が高いからか。

867 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:20:27.91 ]
>>862
関係ないとはいわんが、前進してないだろう
>>834で「>>810で答えが出てる」と指摘を受けておきながら「クロージャだ、即時関数だ」と言葉遊びを続ける理由がわからん

868 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:22:46.10 ]
>>834=>>862なんだが。。。

869 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:24:48.10 ]
>>810はwhileじゃないじゃん。

870 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:28:23.38 ]
whileを>>810っぽく書こうとするとこうなるな。

(function() {
var condition;

while(condition) (function() {
  condition = ?; // 条件書き換え
})();

})();

871 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:29:40.77 ]
俺が整理してやるよ
Javascriptでスコープいったらクロージャは無視出来ない
ここまではいいだろ? で
>>807wwでは毎回クロージャが作られる
>>831では毎回クロージャが作られない
そこが周回ごとにスコープ出来てない、言われてるんだろ

872 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:30:03.57 ]
>>868
それはすまんかった
>>839- から続く不毛な議論に終止符を打ちたかったんだが、途中から入ると難しいな…

>>869
while でも出来る

873 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:30:43.17 ]
>>872
> while でも出来る

じゃあ、実際にやってみ。

?って思うぞ。

874 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:32:32.98 ]
>>871

> >>807wwでは毎回クロージャが作られる

お前根本的なところがわかってないんじゃないか?
>>807はループになってない。



875 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:33:07.20 ]
>>871
> >>807wwでは毎回クロージャが作られる
ちょwおまwww

876 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:33:13.29 ]
>>807のクロージャーの部分は
whileの( 条件 ) だ。

877 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:37:04.76 ]
>>873

var i = 0;
while (i < 10) (function (i) {
 console.log(i++);
}(i));

878 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:37:26.72 ]
whileにクロージャーを使えというレスに
対するボケを見抜けない人は辛いなw

879 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:38:45.15 ]
>>877
想定通り、無限ループやっちゃったねw

880 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:40:58.13 ]
ねぇねぇ 今どんな気持ち?
        ∩___∩                     ∩___∩   
    ♪   | ノ ⌒  ⌒ヽハッ    __ _,, -ー ,,    ハッ   / ⌒  ⌒ 丶|
        /  (●)  (●)  ハッ   (/   "つ`..,:  ハッ (●)  (●) 丶
       |     ( _●_) ミ    :/       :::::i:.   ミ (_●_ )    |
 ___ 彡     |∪| ミ    :i        ─::!,,    ミ、 |∪|    、彡____     ねぇ今どんな気持ち?
 ヽ___       ヽノ、`\     ヽ.....:::::::::  ::::ij(_::●   / ヽノ     ___/ ねぇねぇったらー
       /       /ヽ <   r "     .r ミノ~.    〉 /\    丶      
      /      /    ̄   :|::|>>877 ::::| :::i ゚。     ̄♪   \    丶    
     /     /    ♪    :|::|    ::::| :::|:            \   丶     
     (_ ⌒丶...        :` |    ::::| :::|_:           /⌒_)     
      | /ヽ }.          :.,'    ::(  :::}            } ヘ /        
        し  )).         ::i      `.-‐"             J´((
          ソ  トントン                             ソ  トントン


881 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:41:44.01 ]
0
0
0
0
0
0
0
0
0
0
0
0
0


882 名前:877 mailto:sage [2012/02/20(月) 01:47:11.21 ]
そういうことか
var i = 0;
while (i < 10) i = (function (i) {
 console.log(i++);
 return i;
}(i));

883 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:47:49.11 ]
(function(){
var i = 0;
while (i++ < 10) (function (i) {
 console.log(i);
}(i));
}());


884 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:49:30.70 ]
>>882
iがスコープに閉じてない。




885 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:49:56.89 ]
var i = 0;
while (i++ < 10) (function () {
 console.log(i);
}());

こうだろwww

886 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:50:31.07 ]
リロードしろとあれだけ(ry

887 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:52:35.57 ]
で話は>>831という最終形態に戻る。

普通はこれでいいし、
var i=0;
while(i<10) {
 console.log(i++);
}

どうしてもというのなら、

(function() {
 var i=0;
 while (i<10) {
  console.log(i++);
 }
}())

これだけでいい。へんなコード書くな。

888 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:54:07.31 ]
>>887
だから、それだとスコープが毎回できないだろ
毎回スコープを作るのがお題なんだから
そのお題の理由はわからんけどw

889 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:55:01.25 ]
結局のところ、>>800が正しいならむしろES.nextのletがバッドノウハウになる気がするんだがそこんとこどうよ?

890 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:56:45.03 ]
whileとかどうせループの最初で変数初期化するんだから
これでいいが
(function() {
 var i=0;
 while (i<10) {
  var j=0, k=0;
  ・・・
 }
}())

変数初期化サボるとかどうしてもやりたいのなら
(function() {
 var i;
 while (i<10) {(function() {
  var j, k;
  ・・・
 }())}
}())

こう書けば?

{ ・・・ } が JavaScriptでは (function() { ・・・ }()) に
なるってだけの話をいつまで続けてるんだ?

891 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 02:01:51.13 ]
>>884
そこまで求めるのか
while 文の体裁を崩して条件式に関数を入れないと無理だと思うのだが


892 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 02:09:23.12 ]
すごく変態です……ってことだろ

少なくともブロックスコープさえあれば自然に書ける(C++派)
あるいは末尾再帰が最適化されるなら開き直って全部再帰で書ける(Scheme派)
letがなくてどっちもできない現状のJavaScriptは中途半端だなって気はする
つーかブロックスコープなんていらんから末尾再帰の最適化しろと言いたい

893 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 08:57:39.20 ]
>>885のは無意味
(function() {
 var i=0;
 while (i++ < 10) (function (n) {
  console.log(i++);
 })(i);
}());
これと
(function() {
 var i=0;
 while (i<10) {
  console.log(i++);
 }
}());
これじゃ意味が違うだろ


894 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 08:58:16.95 ]
上の方のconsole.log(i++)はnに置き換えてねw



895 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 10:32:13.71 ]
while(i ? i < 10 : (i = 0, true)) (function(i) {
 console.log(i)
})(i++)

896 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 11:53:50.87 ]
Javascriptは、条件式の部分で変数宣言ができないから、
条件式まで含めなくても実用上は困らないと思う。

897 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 15:04:50.75 ]
>>889
es6はlet定義しかないけど

(function() { let x = 10; {let x = x + 20; console.log(x)}})() //->NaN
(function() { let x = 10; let x2 = x + 20; console.log(x2)})()//->30
(function() { let x = 10; {let( x = x + 20)console.log(x)}})() //->30
を理解してりゃ問題ないと思う。

letでブロックスコープになると思ってるのが間違い。
>>800の言いたいことは多分こういうのだと思う。

898 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:21:27.95 ]
>>889
>>800は正しくない。
全てObjectなんて言えるのはSmalltalkみたいに
制御文の中のbodyもObjectにできるような言語。

Javascriptは、Schmeに多くを担いながら、
Cのsyntaxを使い、なおかついろいろと削ぎ落してブラウザ向けに軽量にした言語。
ECMAScriptの仕様的にも”primitive value"は"Object"ではない。

899 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:23:21.85 ]
意識しないうちにboxing/unboxingをするんだっけか

900 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:31:02.68 ]
>>892
Schemeは、letに関しては、
ラムダ式さえあれば、letも簡単に実現できる。(当時はBLOCKマクロ)
意味論的にも問題ないし、コンパイラもシンプルになる。"RABBIT: A Compiler for SCHEME"
けどプログラム書く時に不便だからletは言語仕様に入れようね派。"RnRS"

901 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:45:36.88 ]
ちなみに、Brendan Eichは、Javascript(Mocha, Livescript)を設計した時に、
"RABBIT: A Compiler for SCHEME"にもろに影響を受けて、
言語を小さくするためletは導入しない決定をしたと思われる。
Schemeを実装する予定でNetscape社に入ったと後に語っているので。

ただ「小さくする」制約が、今では全く無意味になったので、
EichはECMAScript仕様策定ではかなり盛り込む派に立っている。
moduleも付け加えたほうがいいと考えている。
けどそれは現在のWebの世界を尊重して慎重にやらないといけないという立場。
だからHarmonyを仕切ってES4を一旦白紙に戻した。
けど捨てたわけじゃなくて個別の項目について継続審議中。


902 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:49:31.65 ]
letは、lambdaを使うマクロとして実装することもできるけど、プリミティブとして実装すると、
作ったらすぐその場で適用する関数として、最適化できるんだよな確か。

903 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 18:24:48.37 ]
let式じゃなくてlet文なら持ち運ばれる可能性ないからね。
エスケープ解析しなくてもクロージャ生成を端折れる。

904 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 21:28:25.03 ]
javascriptって結局lispのパクリemacsのパクリなんだろ
もうjavascript廃止してlispを標準にしろよ



905 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:11:25.64 ]
ブラウザ標準スクリプト言語として?
妄想は他の人の目に付かないところでやってくれ

906 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:31:42.97 ]
見た目がC言語っぽくないと拒絶しちゃう人がいかに多いかわかってないだろ >>904

907 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:09:13.62 ]
まあ、ブロックスコープがないC言語でも
UnixやLinuxが作れるように、合ったら便利だけど
無くても問題ないものなんだろうね。
関数にしておけばいいだけなわけだし。

908 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:18:17.08 ]
> ブロックスコープがないC言語
> ブロックスコープがないC言語
> ブロックスコープがないC言語

909 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:27:47.91 ]
早速一匹釣れたかw

910 名前:1/2 mailto:sage [2012/02/20(月) 23:27:57.98 ]
そもそもCはオブジェクト指向じゃない。その上、for文にブロック変数が作れるよ。ミスリー?
スコープが簡単に作れないってのはJavaScriptが根本に抱えてる問題の一つだよ
現実から目を背けたって意味ない

911 名前:2/2 mailto:sage [2012/02/20(月) 23:30:19.23 ]
JavaScriptは

他のオブジェクト指向言語のように直感的にブロックでスコープが作れないし
(ex.ループ内にスコープを作ろうとするだけで複雑なコードになる)

Function objectでスコープ作れるけど、Lisp/Schemeほどの便利さはない
(ex.末尾再帰最適化されない、高階関数が簡単にはできない)

912 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:55:05.01 ]
いや、高階関数は結構得意。
Javascriptの特徴といっていいくらい。
設計時にクロージャを導入する決断をしたのは素晴らしい。
Schemeと一緒で部分適用は苦手。(ML, Haskellは得意)

913 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:03:31.16 ]
玄人向きの機能が無駄に充実してるのに基本的な機能が足りない
でもそんなところが可愛いよJavaScript

914 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:20:58.15 ]
釣り人が足滑らせて溺れながら「釣れたか」とか言ってる?



915 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 03:24:10.03 ]
>>903
var x = eval("let (x = 20) { x }")
これで簡単に外に漏れる。
var xの実行コンテキストがGlobalならCallがメモリリークするのと同じ問題が起きる。

916 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 08:43:22.34 ]
evalはバッドノウハウだから
どうでもいい。

917 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 10:17:16.82 ]
次のテンプレ案これでどうかな。

【言語設計】JavaScriptスレ 2.0【限定】
言語としてのJavaScriptに関する議論のスレです。
Web製作におけるJavaScriptの質問はWeb製作板へ。

918 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 10:37:29.46 ]
せっかくのホイホイスレなんだから限定にすんなよ

919 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 10:53:08.81 ]
次スレイラネ
ECMAScriptスレで必要充分だろ

920 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:22:20.88 ]
無いと分かってない奴が立てるんじゃないかな。このスレみたいに。

921 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:28:03.39 ]
立てなくてもいいからdartスレのバカどもをちゃんと引き取ってくれよ

922 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:55:52.87 ]
おまえが誘導しろよ

923 名前:デフォルトの名無しさん [2012/02/21(火) 15:21:48.40 ]
2ちゃんねるはオワコン

質問サイトに移行したほうが俺らのため

924 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 16:00:52.24 ]
質問サイトもいいかげんオワコンだろがw

はてなはあいかわらずのはてなクオリティだし、他のサービスはほとんどの回答者がハズレ回答者だし。



925 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:40:17.66 ]
dartは別スレでいいだろ

926 名前:デフォルトの名無しさん [2012/02/21(火) 21:32:28.60 ]
連想配列をキーそのものでソートする方法を教えてください

927 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:31:52.58 ]
連想配列はソートできませんので連想配列のキーをソートしてください。

928 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:47:05.49 ]
javascrpitを使って、skypeのチャットのようなことをブラウザでやりたいのですが可能でしょうか?
サーバからの要求を受ける機能があるかどうかというところだとは思っているのですが

929 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:52:47.17 ]
>>928
Ajaxで検索

930 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:01:45.08 ]
>>929
早い返信ありがとうございます
www.openspc2.org/JavaScript/Ajax/Ajax_study/chapter02/001/index.html
↑ググってすぐに見つかった、ここをとりあえず見てました。

ざっと読んだ感じ、同期を取ることがJSでは不可能なため、setIntervalなどを使っていくしかないという認識でよいでしょうか?

931 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:07:09.36 ]
Push自体は無理なので
定期的なポーリングによるPushもどきになるのは仕方ない

932 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:14:36.15 ]
なるほど、やはりそうなりますよね

私はチャットのデータをMySqlで管理したく思っているのですが、
とすると、数秒起きに最新何十件のチャットを読み込みにいくということになりそうですね。
あとはどのようにレスポンスをあげていくか頑張ってみます。
ありがとうございました

933 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:35:17.53 ]
>>932
「何かあるまで応答を返さない」 という手もあるぞ

934 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:38:33.57 ]
ローカルストレージはブラウザによって作法が違うのでよく調べたほうが良い。
今後はHTML5 client-side database storageに集約されていくのだろうが。



935 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:15:40.04 ]
pushが無理とかHTML4時代の人間ばかりだなw

936 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:24:19.87 ]
スレがすげー伸びてるw

>>727
>>725が言っているのは、
var foo = function foo() {}
function foo() {}
と全く同じ意味だから前者は無駄ってことなんじゃ?


937 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:53:58.05 ]
>>930
よろしくありません
ピント:ggrks

938 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:59:31.06 ]
>>935>>937
まぁそう言わずに、勉強する気はありますので、せめて何という技術かくらいは教えていただけませんか

939 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 02:41:36.40 ]
>>936
どっちかと言えば
var foo = function(){};
と同じと言いたかった。
fooを二度書く意味あんのかよと。格好悪いし。

940 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 03:19:41.23 ]
>>939
同じじゃないよ
nameとスコープと変数の実体化に影響する

941 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 03:23:04.22 ]
>>936スタイルで書いてると(必ずしも同じ名前である必要はない)
幸せになれるよ

942 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:18:42.72 ]
>>936,939
var f = function (){};console.log(f.name);
var f = function hoge(){};console.log(f.name);
var f = function hoge(){},b = f;console.log(b.name);

この3つ実行すりゃ違いわかるよ

943 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:08:36.16 ]
>>941
後者で書いてると幸せになるの?

944 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:27:48.11 ]
>>938
横レスだけど、HTML5前提でよければ、WebSocketという技術がある
詳しくは、WikipediaなりGoogleで調べてちょ



945 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:32:34.23 ]
(>>944の補足)
WebチャットなりWebSocket技術はWebブラウザ前提の話題だから、
もし続きの質問がしたいのであれば、このスレよりも
WebProg板のHTML5スレのほうが期待するレスをもらえると思う

946 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:36:43.74 ]
こういうプッシュとかを使う物って、その間ずっとセッションを残してる訳だろ?
サーバ側が対応してないと実際使用するのは難しい

947 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:49:04.39 ]
WebSocketは(socketという名前が示すように)双方向通信技術であって、
プッシュ技術ではないし、さらにはサーバ側の対応は(最初から)必須

948 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 14:33:11.47 ]
>>939
それは違う。>>936の2つとは違う。

>>942
>>936の2つは同じ。

949 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 16:20:31.58 ]
>>948
var f = function hoge () {
console.log(hoge);
};
console.log(hoge);

まぁ両方fooだから同じとも言えるけど

950 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 16:59:58.57 ]
var foo = function foo() { alert(foo) }
var bar = foo;
foo = undefined;
bar(); // IE以外で動作

これならarguments.calleeで良い気がするけど、
他にメリットあるんだろうか。

951 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 17:02:02.86 ]
function expressionのnameはbody内で有効な識別子に過ぎないから当たり前。
再起その他、自己参照のある関数用。

952 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 20:58:44.24 ]
>>944-947
遅くなりましたが返信ありがとうございます
HTML5対応ブラウザはWebSocket、未対応ブラウザはsetIntervalで動くように試してみたいと思います
さっそく勉強に入ります
これから作るぞーという今の気持ちが一番楽しくていいですね

953 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 22:30:45.66 ]
arguments.calleeは使ったらダメ

954 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 22:31:31.36 ]
で、最終的にはアレを使えばいいから
作らなくてよくなるんだよなw



955 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:07:51.56 ]
アレってなんだよ
websocketはサーバー側が対応してないとどうにもならんしポーリングはラグるしcommetは接続数たらんくなるしなので同期はやるだけの価値がないというのが俺の結論

956 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:41:02.25 ]
サーバーは対応してるの使えばいいだけ

957 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:42:07.70 ]
>>955
やるだけの価値がない理由が
技術的制限の話しかでてないぞ。

価値というのはそれを使うユーザーが
必要かどうかだろ。

958 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:37:20.11 ]
>>953
なんで?

959 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:33:02.14 ]
>>953 これを見て思い出したけども、
そういや何でES5でarguments.calleeって使えなくなるの?
もともと自分自身への参照がargumentsの中にあるのは違和感があったけど。

960 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 09:51:34.43 ]
>>958-959
togetter.com/li/215907

961 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 09:56:02.34 ]
本来callerとかcalleeとか、スタックフレームから参照するはずのものを、
関数オブジェクト経由で参照するとか、設計が変だったからな、あれ。

962 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 11:52:37.38 ]
>>961
arguments.caller: call site依存 (要はスタックフレームへの参照)
arguments.callee: 自分のことだからセルフリファレンスがちゃんと定義されれば必要ない。












963 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:20:55.93 ]
callerが危険だから廃止なのは分かる。
calleeはargumentsにぶら下げるのが不恰好だから廃止って感じなのか。

964 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:39:51.85 ]
argumentsは動的に決まるのに、calleeは参照場所で静的に決まってるからね。
あまりいい整理の仕方じゃなかったね。



965 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:34:12.67 ]
関数名は__FUNC__で取得できるようにすれば良い。


966 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:49:03.73 ]
WMIをつかうとき、取得結果をEnumeratorに食わせなければいけない
理由をおしえてください。

967 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 00:24:37.57 ]
WMIのメソッドがコレクションを返すから

968 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 11:33:13.91 ]
コレクションは直接見れないの?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef