+ JavaScript の質問用スレッド vol.68 +
話の途中ですみません。 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.
>>906 f();のまえでfの中身を出力してごらん
ちょっと回答が悪かった。var fの部分は var f = ( function() { return f; }() ); と同じ、だから関数実行時点でのfはundefined。 g()は「fという名前を持つfunctionオブジェクト」ではあるけど 内部からfで自分自身を呼べるか、それとも変数fをアクセスしにいくのかは 実装依存っぽい。Fx3だと再現できない。
>> 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"); ==
910 :
Name_Not_Found :2009/02/17(火) 20:54:30 ID:TD9JVw2v
マウスが画像に乗ったら、徐々に画像が変わるJavascript分かる方いませんか?ネットから引っ張ってきたサンプルが上手くいきませんでした。
>>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枚重ねて手前のほうをタイマーで透過していく
>>910 翻訳すると
「
>>1 読んでいません作る能力もありませんが、910の理想とする物を作って!!!」
だな
スレチすぎる
913 :
906 :2009/02/17(火) 22:53:50 ID:???
>> 908, 911 感謝です。理解しました。 var g = function f() {}; って書いても関数式で解釈される?ようです。 # グローバル汚さなくていいかも。 関数内部で自分自身への参照が実装依存なのは残念です。 いままで、呼べるものだと思ってて、ちょっと再起関数を書くとき下みたいにしてました。 (function f() { return f(); })(); # arguments.callee 使えばいいか。
うっ、流れが速いね! テンプレ論議あれば今どぞ!!
うんごめん、908書いたときにはg()の返値が出力されてると勘違いしてた。
917 :
906 :2009/02/18(水) 01:07:44 ID:???
いえいえ、多謝。 関数(式)の名前空間の理解が深まってよかったです。
918 :
emi :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
すみません。どうかよろしくお願いします。
>>918 そう言うのは、対価を払って頼むべきこと
>>870 ,875,901,903,904
基本の勉強終わるまでもうレスすんな
>>920 var x = A || B;
の || の動作の意味が良く分からないから教えて。
|| って if文の中で使うものだと思ってた。
>>921 Aがnull等falseとして扱われるものであればB、そうで
なければAを値としてxに入れる。Lisp系の言語に多いパターン。
923 :
921 :2009/02/18(水) 11:18:49 ID:???
>>922 if ( !Boolean(A) )
{ return A; }
else
{ return B; }
みたいなものだったのかー、神様どうもありがとう。
ちがうだろ
>>921 まずAを評価する
Aがtrueに型変換できる場合にはAを返す(Bは評価されない)
そうでない場合にはBを返す
(ただしJavascript1.2以上)
関数の引数のうち省略可能なもののデフォルト値を定めたり、
ブラウザ依存を適当に処理したりする(navigator.userLanguage || navigator.language とか)
のに使う
かぶった
928 :
Name_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);
document.write(screen.width + "*" + screen.height);
どこに笑いどころがあるのかわからん・・・
このWebページは、スクリーンの解像度が(800*600)用に最適化されています。 あなたのスクリーン解像度は(1920*1080)です。 可能ならば解像度を変更してください!
>>932 ボール紙に四角い穴を800x600になるように開けて、
画面に貼りつけてから利用すればよろし。
935 :
921 :2009/02/18(水) 21:35:47 ID:???
>>925-926 思いっきり勘違いしてました^^; クロスブラウザ対策に使えるとはいいこと聞けました。
ありがとうございました!
すいません。「ループラベル」を日本語にしてください。
938 :
936 :2009/02/18(水) 22:13:47 ID:???
>>937 さん、早速ありがとうございます。分かりました。「附箋」ですね(笑
すみません、onUnload等で退室時にプログラムを呼び出す事って可能でしょうか? やりたい事としてはそのページの閲覧者を管理したくて onUnload時にログの値をデクリメントする処理を含んだPHPファイルを実行させたいのです。
やってみればいいじゃん。
その方法がわからなくて困っているのです…。入室時は <script type="text/javascript" src="./write1.php"></script> とする事でページアクセス時にインクリメントする事は出来るのですが…。
JavaScript だから任意のタイミングで実行できるし、実行せずに退室することもできる
phpのほうでやるべきだよな
>>942 その実行する方法をご教授頂けないでしょうか?
onunloadじゃだめだったの?
できるかは知らないけどonunloadでXHRするか<script>をDOMノードに足す。
>>946 助言ありがとうございます。
そのやり方で調べてみます。
948 :
Name_Not_Found :2009/02/19(木) 01:21:32 ID:eBUbH2u1
>>939 var ajax = function(url){ // ajaxする関数 };
window.onunload = function(){ ajax(デクリメントするphp); }
こういうこと?
>>939 人数管理したいのなら、JavaScriptで「10秒間隔で在室登録
を更新する」呼び出しを行い、PHP側で「在室登録が継続されて
いる人数」を数えるのがよいかと。人数が1万とかだと重いかも
知れないけどね。
950 :
Name_Not_Found :2009/02/20(金) 21:53:53 ID:iYlos5Me
>>950 どんなURLをどんな形で開くかにもよる。
IEは複数ウィンドウ開こうとすると警告が出るよ。
つまり迷惑行為と感じる人もいるってことだから止めたほうがいい。
>>950 onclickでwindow.openしまくってreturn false
953 :
Name_Not_Found :2009/02/20(金) 23:03:30 ID:h/NYSWSV
戻るボタンを使わせないjavaスクリプトを教えてください。
document.write('戻るボタンを使わないでください');
955 :
950 :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>
>>955 for (i = 0; i < url.length; i++){
window.open(url[i], i);
}
957 :
950 :2009/02/20(金) 23:44:40 ID:iYlos5Me
959 :
950 :2009/02/21(土) 00:24:41 ID:PtDjYrcu
>>958 一時ファイルを削除してみましたが・・やはりできんのです。。
最後の配列のURLが表示されます。。
マルチラインのテキストを容易に変数へ格納する方法はありますか? たとえば <--ここから abc 123 xyz 789 -->ここまで をhogeという変数に入れたいです たとえばRubyだと hoge = <<TEXT abc 123 xyz 789 TEXT とやれば、視覚的に見たままのテキストがhogeに格納されますが JavaScriptで似たようなことは可能でしょうか?
JSON でも使え
var hoge = '' + <><![CDATA[ abc 123 xyz 789 ]]></>;
innerHTMLは代入されるたびにブラウザがパースかけるから for文の中とかで使うとめっさ効率悪くなる。 for文中で innerHTML += str; とかもう最悪。
>>953 window.location.replace(url);
965 :
950 :2009/02/21(土) 15:56:37 ID:PtDjYrcu
>>965 FirefoxでFirebug使いながらデバッグしろ。
967 :
950 :2009/02/21(土) 16:42:55 ID:PtDjYrcu
>>966 IE7で動かしたいんですが、Firefoxでのデバグで良いのですか?
>>967 当たり前だろ
デバッグしなきゃどんなブラウザでも動かないことぐらい分かるだろ
うっせーよ馬鹿。
>>965 こういうこと言うのもなんだけど、そのコードから察するに
sleipnirのグループ機能とか使えばいいんじゃないの?
Firefoxのブックマークでもフォルダにまとめれば タブですべて開く があるし
972 :
Name_Not_Found :2009/02/21(土) 17:43:16 ID:Cx/tnPuC
javascriptで質問なんですが、 ワンクリックでコピーとかどうやったら出来るのでしょうか? 検索してもうまくかからないので教えて下さい。
>>972 IEならclipboardData.setData
それ以外はflashのsetClipboardを使う
974 :
950 :2009/02/21(土) 17:46:39 ID:PtDjYrcu
>>966 なんでそんなに怒ってるの?w
正直このためにFirefoxをインストールしたくないです
ソース教えてくれたら エロサイトのURL入れたソース貼るのに・・
というか、ドザは
>>973 レス有難うございます!
本当に助かりました!
>974 普通の人が毎回同じページを巡回するなら、 ブラウザでブックマークして纏めておいて、 「ブックマークを全て開く」機能を使う。 自分で作ろうとする人って異端だと思うな。 誰かが欲しがるようなモノって、 大抵別の誰かが便利に使えるように作ってくれてるもんだよ。 ブラウザ関係は特にそう。 自分で作らざるを得ないような低機能ブラウザを盲信してる人は これを知らないか、知ってて無視しようと努力してるか、大抵どっちかだね。
便利なものに目を背ける理由が分からない
>>979 それが日本人なんだよね
車輪の再発明したがる
車輪の再発明。kwsk
楽したがる人が多い中自ら茨の道を進もうとしてる
>>974 は偉いと思うよw
茨の道を進むのと、地球を山手線感覚で歩くのとは違う
そろそろ次スレ・・・・。 テンプレ論議なし?
正規表現で、"楽しいかもね、そうかもね" から、"楽しいかもね" までを抜き出したい場合に、 楽.*ね だと一番最後まで抜き出されてしまうのですが、どうしたらうまく抜き出せるのでしょうか?
楽([^ね]*)ね
最短一致にしたいという趣旨なら 楽.*?ね
お、この板はID出ないのか。 自演し放題だな。
>>988 .*の後に?を付けると最小マッチになる
>>990 ,992
最小(最短)ではないだろ
最小にしたいのなら
楽([^楽ね]*)ね
か
楽([^楽]*?)ね
素人は黙っとけ。。
>>988 解答は出てるけど、今後のために「正規表現 欲張り」の
キーワードでググってみるといいよ。
alert("楽楽しいねね".match(/楽.*?ね/)); //楽楽しいね 非貪欲な繰り返し≠ショーテストマッチ
おいおいおい、
>>988 の質問の意図をくみ取ってやれよw
馬鹿正直に読み取ると "楽しいかもね" が正解になってしまうだろw
すぐムキになるやつは使えないな。
>>997 どんな意図があろうと、?つければ最短一致と教えるような解答者はカスじゃないかな
うめとくか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。