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

このエントリーをはてなブックマークに追加
906Name_Not_Found
話の途中ですみません。
function文とfunction式の違いがしりたくて、次のようなコードを書いたのですが。
g() の処理結果が undefined
f() の処理がエラーになる理由がわかりません。どなたか説明してもらえないでしょうか?
よろしくお願いします。
==
var f = function(str) {
print(str);
return f;
}("foo");
var g = function f(str) {
print(str);
return f;
}("bar");
g();
f();
==
SpiderMonkeyの結果
foo
bar
undefined
tmp2.js:14: TypeError: f is not a function

Rhinoの結果
foo
bar
undefined
js: uncaught JavaScript runtime exception: TypeError: f is not a function, it is undefined.
907Name_Not_Found:2009/02/17(火) 20:10:42 ID:???
>>906
f();のまえでfの中身を出力してごらん
908Name_Not_Found:2009/02/17(火) 20:22:56 ID:???
ちょっと回答が悪かった。var fの部分は
var f = ( function() { return f; }() );
と同じ、だから関数実行時点でのfはundefined。

g()は「fという名前を持つfunctionオブジェクト」ではあるけど
内部からfで自分自身を呼べるか、それとも変数fをアクセスしにいくのかは
実装依存っぽい。Fx3だと再現できない。
909Name_Not_Found:2009/02/17(火) 20:23:32 ID:???
>> 907
ありがとうございます。undefinedですね。
帰宅してからもう少し考えて見ます。下みたいに思考中です。
==
print(f);
var f = function(str) {
print(str);
print(f);
return f;
}("foo");
print(f);
var g = function f(str) {
print(str);
print(f);
return f;
}("bar");
print(f);
g("baz");
print(f);
f("qux");
==
910Name_Not_Found:2009/02/17(火) 20:54:30 ID:TD9JVw2v
マウスが画像に乗ったら、徐々に画像が変わるJavascript分かる方いませんか?ネットから引っ張ってきたサンプルが上手くいきませんでした。
911Name_Not_Found:2009/02/17(火) 21:00:58 ID:???
>>900
全然関係ない

>>906
g に代入しようとしてるのは関数式だから、関数宣言みたいに先読みは働かないし、内部からしか見えない
f だの hoge だのの変数は、スコープチェーンをたどって最初に見つかった値に評価される
var はスコープの最初にまとめて宣言される
まとめると

1. f と g が宣言された。中身は undefined
2. 無名関数を作って速攻で実行、"foo" を出力。戻り値である undefined を f に代入
3. 関数 f を作って速攻で実行、"bar" を出力。戻り値である 関数 f を g に代入
4. g を引数なしで実行して undefined を出力
5. f is undefined.

>>910
2枚重ねて手前のほうをタイマーで透過していく
912Name_Not_Found:2009/02/17(火) 21:42:44 ID:???
>>910
翻訳すると
>>1読んでいません作る能力もありませんが、910の理想とする物を作って!!!」
だな

スレチすぎる
913906:2009/02/17(火) 22:53:50 ID:???
>> 908, 911
感謝です。理解しました。
var g = function f() {};
って書いても関数式で解釈される?ようです。
# グローバル汚さなくていいかも。

関数内部で自分自身への参照が実装依存なのは残念です。
いままで、呼べるものだと思ってて、ちょっと再起関数を書くとき下みたいにしてました。
(function f() { return f(); })();
# arguments.callee 使えばいいか。
914Name_Not_Found:2009/02/17(火) 23:15:08 ID:???
>>913
実装依存じゃないよ
915Name_Not_Found:2009/02/17(火) 23:32:14 ID:???
うっ、流れが速いね! テンプレ論議あれば今どぞ!!
916Name_Not_Found:2009/02/18(水) 00:33:04 ID:???
うんごめん、908書いたときにはg()の返値が出力されてると勘違いしてた。
917906:2009/02/18(水) 01:07:44 ID:???
いえいえ、多謝。
関数(式)の名前空間の理解が深まってよかったです。
918emi:2009/02/18(水) 01:48:53 ID:CdwyNT8D
プログラミングど素人です。すみませんが教えてください。

GPSのデータを自分のHP上にgooglemapで表示させたいんです。
HP URL http://khepresh.toyama-cmt.ac.jp/~d04233
GPSデータ
$GPGGA,025207.561,3645.5161,N,13709.5192,E,0,0,,-10.0,M,35.7,M,,*5A
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,09,05,69,141,,12,64,095,17,22,59,271,24,18,51,192,21*7D
$GPGSV,3,2,09,30,50,182,18,09,42,048,,14,38,313,24,15,11,112,16*7E
$GPGSV,3,3,09,31,05,252,23*43
$GPRMC,025207.561,V,3645.5161,N,13709.5192,E,0.00,0.00,160708,,,N*7A
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
$GPGGA,025208.561,3645.5161,N,13709.5192,E,0,0,,-10.0,M,35.7,M,,*55
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,09,05,69,141,,12,64,095,17,22,59,271,17,18,51,192,20*7C
$GPGSV,3,2,09,30,50,182,17,09,42,048,,14,38,313,23,15,11,112,15*75
$GPGSV,3,3,09,31,05,252,22*42

↑毎秒データが追加される。
このデータの必要な部分のみをPHPで抽出し、javascriptに組み込み
グーグルマップにリアルタイムでピンを立てていきたいんです。
流れはわかるのですが、プログラミングしろとなると本当にわからなくて…m(_ _)m

すみません。どうかよろしくお願いします。
919Name_Not_Found:2009/02/18(水) 02:00:49 ID:???
>>918
そう言うのは、対価を払って頼むべきこと
920Name_Not_Found:2009/02/18(水) 07:35:56 ID:???
>>870,875,901,903,904
基本の勉強終わるまでもうレスすんな
921Name_Not_Found:2009/02/18(水) 08:58:58 ID:???
>>920
var x = A || B;

の || の動作の意味が良く分からないから教えて。
|| って if文の中で使うものだと思ってた。
922Name_Not_Found:2009/02/18(水) 10:51:30 ID:???
>>921
Aがnull等falseとして扱われるものであればB、そうで
なければAを値としてxに入れる。Lisp系の言語に多いパターン。
923921:2009/02/18(水) 11:18:49 ID:???
>>922
if ( !Boolean(A) )
{ return A; }
else
{ return B; }

みたいなものだったのかー、神様どうもありがとう。
924Name_Not_Found:2009/02/18(水) 11:47:46 ID:???
ちがうだろ
925Name_Not_Found:2009/02/18(水) 11:54:59 ID:???
ttps://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Operators/Logical_Operators

書き換えるなら
var x = A ? A : B;
if(A) { x = A } else { x = B }

実際はデフォルト値の設定によく使う。
与えられなかった引数はfalse扱いのundefinedになるから。
function foo(x) {
 x = x || "default string";
926Name_Not_Found:2009/02/18(水) 12:14:27 ID:???
>>921
まずAを評価する
Aがtrueに型変換できる場合にはAを返す(Bは評価されない)
そうでない場合にはBを返す
(ただしJavascript1.2以上)

関数の引数のうち省略可能なもののデフォルト値を定めたり、
ブラウザ依存を適当に処理したりする(navigator.userLanguage || navigator.language とか)
のに使う
927Name_Not_Found:2009/02/18(水) 12:16:08 ID:???
かぶった
928Name_Not_Found:2009/02/18(水) 15:22:06 ID:0YQwiQrJ
解像度を表示するスクリプトですが
IE6,IE7,Firefox,Opera,safariに対応できますか?
昔、何かの本で見たときはクロスブラウザ対応はもっと複雑なコードを見たので不安です

iwidth = screen.width;
iheight = screen.height;
document.write(iwidth+"*"+iheight);
929Name_Not_Found:2009/02/18(水) 15:32:18 ID:???
document.write(screen.width + "*" + screen.height);
930Name_Not_Found:2009/02/18(水) 15:59:55 ID:???
ググったらこんなん引っかかってワロタ
ttp://jsajax.com/ScreenResolutionDetectionArticle853.aspx
931Name_Not_Found:2009/02/18(水) 16:15:51 ID:???
どこに笑いどころがあるのかわからん・・・
932Name_Not_Found:2009/02/18(水) 16:43:32 ID:???
このWebページは、スクリーンの解像度が(800*600)用に最適化されています。
あなたのスクリーン解像度は(1920*1080)です。
可能ならば解像度を変更してください!
933Name_Not_Found:2009/02/18(水) 16:57:06 ID:???
>>932
ボール紙に四角い穴を800x600になるように開けて、
画面に貼りつけてから利用すればよろし。
934Name_Not_Found:2009/02/18(水) 17:05:09 ID:???
>>932
笑いのツボがずれてるよ
935921:2009/02/18(水) 21:35:47 ID:???
>>925-926
思いっきり勘違いしてました^^; クロスブラウザ対策に使えるとはいいこと聞けました。
ありがとうございました!
936Name_Not_Found:2009/02/18(水) 21:55:44 ID:???
すいません。「ループラベル」を日本語にしてください。
937Name_Not_Found:2009/02/18(水) 22:03:28 ID:???
>>936
ループラベル

言葉じゃなくてサンプルコードで理解しな
ttps://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Loop_Statements/continue_Statement
938936:2009/02/18(水) 22:13:47 ID:???
>>937さん、早速ありがとうございます。分かりました。「附箋」ですね(笑
939Name_Not_Found:2009/02/18(水) 23:40:57 ID:???
すみません、onUnload等で退室時にプログラムを呼び出す事って可能でしょうか?
やりたい事としてはそのページの閲覧者を管理したくて
onUnload時にログの値をデクリメントする処理を含んだPHPファイルを実行させたいのです。
940Name_Not_Found:2009/02/18(水) 23:42:00 ID:???
やってみればいいじゃん。
941Name_Not_Found:2009/02/18(水) 23:54:57 ID:???
その方法がわからなくて困っているのです…。入室時は
<script type="text/javascript" src="./write1.php"></script>
とする事でページアクセス時にインクリメントする事は出来るのですが…。
942Name_Not_Found:2009/02/19(木) 00:15:26 ID:???
JavaScript だから任意のタイミングで実行できるし、実行せずに退室することもできる
943Name_Not_Found:2009/02/19(木) 00:17:49 ID:???
phpのほうでやるべきだよな
944Name_Not_Found:2009/02/19(木) 00:25:27 ID:???
>>942
その実行する方法をご教授頂けないでしょうか?
945Name_Not_Found:2009/02/19(木) 00:32:17 ID:???
onunloadじゃだめだったの?
946Name_Not_Found:2009/02/19(木) 00:40:27 ID:???
できるかは知らないけどonunloadでXHRするか<script>をDOMノードに足す。
947Name_Not_Found:2009/02/19(木) 00:49:57 ID:???
>>946
助言ありがとうございます。
そのやり方で調べてみます。
948Name_Not_Found:2009/02/19(木) 01:21:32 ID:eBUbH2u1
>>939
var ajax = function(url){ // ajaxする関数 };
window.onunload = function(){ ajax(デクリメントするphp); }

こういうこと?
949Name_Not_Found:2009/02/19(木) 11:01:40 ID:???
>>939
人数管理したいのなら、JavaScriptで「10秒間隔で在室登録
を更新する」呼び出しを行い、PHP側で「在室登録が継続されて
いる人数」を数えるのがよいかと。人数が1万とかだと重いかも
知れないけどね。
950Name_Not_Found:2009/02/20(金) 21:53:53 ID:iYlos5Me
教えてください。
ブラウザはIE7です。
アンカーをクリックした後の動作で、複数のURLのウインドウを新規で開くにはどうしたらよいでしょう・・・?

いろいろ調べてみてるんですが・・・↓こんな長いソースが必要なんですかね?
http://questionbox.jp.msn.com/qa1711018.html
951Name_Not_Found:2009/02/20(金) 22:10:13 ID:???
>>950
どんなURLをどんな形で開くかにもよる。

IEは複数ウィンドウ開こうとすると警告が出るよ。
つまり迷惑行為と感じる人もいるってことだから止めたほうがいい。
952Name_Not_Found:2009/02/20(金) 22:13:39 ID:???
>>950
onclickでwindow.openしまくってreturn false
953Name_Not_Found:2009/02/20(金) 23:03:30 ID:h/NYSWSV
戻るボタンを使わせないjavaスクリプトを教えてください。
954Name_Not_Found:2009/02/20(金) 23:08:34 ID:???
document.write('戻るボタンを使わないでください');
955950:2009/02/20(金) 23:20:07 ID:iYlos5Me
>>951-952
回答、ありがとうございます。迷惑をかけることはありません。自分用です。
正直エロサイトの巡回が目的です。
↓こんな作りにしてみたのですが・・・同じタブのURLが書き換わっています。。
ヒントをお願いします。。
<body onload="EroOpen()">
<SCRIPT TYPE="text/javascript">
function EroOpen()
{
var url = new Array(3);
url[0] = "http://www.yahoo.co.jp";
url[1] = "http://www.google.co.jp";
url[2] = "http://www.goo.ne.jp";
for (i = 0; i < url.length; i++){
this.window.open(url[i],null);
alert(url[i]);
}
}
</SCRIPT>
</body>
956Name_Not_Found:2009/02/20(金) 23:26:27 ID:???
>>955
for (i = 0; i < url.length; i++){
window.open(url[i], i);
}
957950:2009/02/20(金) 23:44:40 ID:iYlos5Me
>>956
レスありがとうございます。
やはり同じタブのURLが上書きで変わっていきます。。
同じWindowの違うタブで次々開きたいんです。
ちなみにIEの設定の設定はこうなっています

http://www.vipper.org/vip1118751.jpg.html
958Name_Not_Found:2009/02/21(土) 00:01:38 ID:???
>>957
ちゃんとキャッシュ消してみ
959950:2009/02/21(土) 00:24:41 ID:PtDjYrcu
>>958
一時ファイルを削除してみましたが・・やはりできんのです。。
最後の配列のURLが表示されます。。
960Name_Not_Found:2009/02/21(土) 00:44:40 ID:???
マルチラインのテキストを容易に変数へ格納する方法はありますか?
たとえば
<--ここから
abc
123
xyz
789
-->ここまで
をhogeという変数に入れたいです

たとえばRubyだと
hoge = <<TEXT
abc
123
xyz
789
TEXT
とやれば、視覚的に見たままのテキストがhogeに格納されますが
JavaScriptで似たようなことは可能でしょうか?
961Name_Not_Found:2009/02/21(土) 00:52:25 ID:???
JSON でも使え
962Name_Not_Found:2009/02/21(土) 08:33:39 ID:???
var hoge = '' + <><![CDATA[
abc
123
xyz
789
]]></>;
963Name_Not_Found:2009/02/21(土) 11:33:23 ID:???
innerHTMLは代入されるたびにブラウザがパースかけるから
for文の中とかで使うとめっさ効率悪くなる。
for文中で innerHTML += str; とかもう最悪。
964Name_Not_Found:2009/02/21(土) 11:36:09 ID:???
>>953
window.location.replace(url);
965950:2009/02/21(土) 15:56:37 ID:PtDjYrcu
すいません。。>>950のものです。アドバイスを頂いて↓こんなソースになりましたが、
やはり最後のURLが表示されます。同じウインドウの違うタブで開きたいです。
ヒントを教えてください。
<body onload="EroOpen()">
<SCRIPT TYPE="text/javascript">
function EroOpen()
{
var url = new Array(4);
url[0] = "http://www.yahoo.co.jp";
url[1] = "http://www.google.co.jp";
url[2] = "http://www.goo.ne.jp";
url[3] = "http://news.goo.ne.jp";
for (i = 0; i < url.length; i++){
window.open(url[i],i);
}
}
</SCRIPT>
966Name_Not_Found:2009/02/21(土) 16:00:58 ID:???
>>965
FirefoxでFirebug使いながらデバッグしろ。
967950:2009/02/21(土) 16:42:55 ID:PtDjYrcu
>>966
IE7で動かしたいんですが、Firefoxでのデバグで良いのですか?
968Name_Not_Found:2009/02/21(土) 16:45:10 ID:???
>>967
当たり前だろ
デバッグしなきゃどんなブラウザでも動かないことぐらい分かるだろ
969Name_Not_Found:2009/02/21(土) 16:59:23 ID:???
うっせーよ馬鹿。
970Name_Not_Found:2009/02/21(土) 17:23:14 ID:???
>>965
こういうこと言うのもなんだけど、そのコードから察するに
sleipnirのグループ機能とか使えばいいんじゃないの?
971Name_Not_Found:2009/02/21(土) 17:31:19 ID:???
Firefoxのブックマークでもフォルダにまとめれば タブですべて開く があるし
972Name_Not_Found:2009/02/21(土) 17:43:16 ID:Cx/tnPuC
javascriptで質問なんですが、
ワンクリックでコピーとかどうやったら出来るのでしょうか?
検索してもうまくかからないので教えて下さい。
973Name_Not_Found:2009/02/21(土) 17:46:25 ID:???
>>972
IEならclipboardData.setData
それ以外はflashのsetClipboardを使う
974950:2009/02/21(土) 17:46:39 ID:PtDjYrcu
>>966
なんでそんなに怒ってるの?w
正直このためにFirefoxをインストールしたくないです
ソース教えてくれたら エロサイトのURL入れたソース貼るのに・・
975Name_Not_Found:2009/02/21(土) 17:49:56 ID:???
>>974
これだから、IE信者は
976Name_Not_Found:2009/02/21(土) 17:50:39 ID:???
というか、ドザは
977Name_Not_Found:2009/02/21(土) 18:00:59 ID:???
>>973
レス有難うございます!
本当に助かりました!
978Name_Not_Found:2009/02/21(土) 18:52:47 ID:???
>974
普通の人が毎回同じページを巡回するなら、
ブラウザでブックマークして纏めておいて、
「ブックマークを全て開く」機能を使う。
自分で作ろうとする人って異端だと思うな。

誰かが欲しがるようなモノって、
大抵別の誰かが便利に使えるように作ってくれてるもんだよ。
ブラウザ関係は特にそう。
自分で作らざるを得ないような低機能ブラウザを盲信してる人は
これを知らないか、知ってて無視しようと努力してるか、大抵どっちかだね。
979Name_Not_Found:2009/02/21(土) 19:10:42 ID:???
便利なものに目を背ける理由が分からない
980Name_Not_Found:2009/02/21(土) 19:12:19 ID:???
>>979
それが日本人なんだよね
車輪の再発明したがる
981Name_Not_Found:2009/02/21(土) 19:42:59 ID:???
車輪の再発明。kwsk
982Name_Not_Found:2009/02/21(土) 19:52:01 ID:???
>>981
ぐぐれ。すぐ分かる。
983Name_Not_Found:2009/02/21(土) 20:00:28 ID:???
楽したがる人が多い中自ら茨の道を進もうとしてる>>974は偉いと思うよw
984Name_Not_Found:2009/02/21(土) 20:06:43 ID:???
茨の道を進むのと、地球を山手線感覚で歩くのとは違う
985Name_Not_Found:2009/02/21(土) 21:03:29 ID:???
そろそろ次スレ・・・・。

テンプレ論議なし?
986Name_Not_Found:2009/02/21(土) 21:53:32 ID:???
スレ立て人ですが、出先で今スレが立てられません。以下で誰か立てて!

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

まず >>2-10 読め! 続いて過去スレ全集を検索!

━━━本スレに書く事を許される者は以下の通り━━━━━
 一、JavaScriptはJavaとは別物であると知っている者
 一、自ら学んでJavaScriptコードを書く意思を持つ者
 一、ユーザに迷惑となるスクリプトを書かない者
 一、質問を分かる日本語できちんと説明できる者
 一、トラブルを再現する最小限のサンプルを貼れる者
 一、テンプレ+FAQ>>2-10/過去ログ/関連資料を読める者
━━━━━━━━━━━━━━━━━━━━━━━━━━━
自力で書く気がない人は他のスレへ(テンプレ末尾参照)。
前スレ http://pc11.2ch.net/test/read.cgi/hp/1230611894/l50
[必読]過去スレ全集 http://wing2.jp/~mirrorhenkan/2ch/javascript/
  (ずべて同一)  http://www2.atpages.jp/mirror/2ch/javascript/
          http://usamimi.info/~mirrorhenkan/2ch/javascript/
[必読]ガイド http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Guide
(GuideをReferenceに→Netscape版言語仕様。多くの実装が準拠:ECMA-262.ed3)
FAQ・注意・過去ログ・仕様書・関連資料・関連スレ>>1-10
987Name_Not_Found:2009/02/21(土) 21:56:28 ID:???
立てた

+ JavaScript の質問用スレッド vol.69 +
http://pc11.2ch.net/test/read.cgi/hp/1235220962/
988Name_Not_Found:2009/02/22(日) 07:46:07 ID:???
正規表現で、"楽しいかもね、そうかもね"
から、"楽しいかもね" までを抜き出したい場合に、
楽.*ね だと一番最後まで抜き出されてしまうのですが、どうしたらうまく抜き出せるのでしょうか?
989Name_Not_Found:2009/02/22(日) 08:17:19 ID:???
楽([^ね]*)ね
990ぼ〜にゃんきゅーぐお:2009/02/22(日) 09:04:51 ID:???
最短一致にしたいという趣旨なら

楽.*?ね
991ぼ〜にゃんきゅーぐお:2009/02/22(日) 09:06:01 ID:???
お、この板はID出ないのか。 自演し放題だな。
992Name_Not_Found:2009/02/22(日) 10:25:20 ID:???
>>988
.*の後に?を付けると最小マッチになる
993Name_Not_Found:2009/02/22(日) 11:25:33 ID:???
>>990,992
最小(最短)ではないだろ
最小にしたいのなら

楽([^楽ね]*)ね

楽([^楽]*?)ね
994ぼ〜にゃんきゅーぐお:2009/02/22(日) 12:08:52 ID:???
素人は黙っとけ。。
995Name_Not_Found:2009/02/22(日) 12:50:14 ID:???
>>988
解答は出てるけど、今後のために「正規表現 欲張り」の
キーワードでググってみるといいよ。
996Name_Not_Found:2009/02/22(日) 12:50:36 ID:???
alert("楽楽しいねね".match(/楽.*?ね/));  //楽楽しいね

非貪欲な繰り返し≠ショーテストマッチ
997ぼ〜にゃんきゅーぐお:2009/02/22(日) 12:58:19 ID:???
おいおいおい、>>988の質問の意図をくみ取ってやれよw
馬鹿正直に読み取ると "楽しいかもね" が正解になってしまうだろw

すぐムキになるやつは使えないな。
998Name_Not_Found:2009/02/22(日) 13:31:45 ID:???
>>997
どんな意図があろうと、?つければ最短一致と教えるような解答者はカスじゃないかな
999Name_Not_Found:2009/02/22(日) 13:33:51 ID:???
うめとくか
1000Name_Not_Found:2009/02/22(日) 13:34:31 ID:???
次スレはこちらとなっております

+ JavaScript の質問用スレッド vol.69 +
http://pc11.2ch.net/test/read.cgi/hp/1235220962/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。