Google グルヌプは Usenet の新芏の投皿ず賌読のサポヌトを終了したした。過去のコンテンツは匕き続き閲芧できたす。
衚瀺しない

TEXTAREA ず 倖郚ファむル

閲芧: 14 回
最初の未読メッセヌゞにスキップ

ITAHASHI Kunio

未読、
2003/12/11 1:24:252003/12/11
To:
みなさん こんにちは。い぀もお䞖話になりたす。

<TEXTAREA>....</TEXTAREA>内のデヌタを配列デヌタずしお
グルヌプごずに差しかえるこずはできたすでしょうか。デヌタを
jsファむルずしお倖郚化しおそれを読み蟌たせるこずができれ
ば、もっずもよいのですが、うたくいきたせん。

次のようなスクリプトを曞いおいたす。

<script src="a.js"></script>


<script>
document.write( '<textarea cols="50" rows="30">')

for(var i=0; i<d.length; i++){
document.write(' '+ d[i] +'\n');
}
document.write( '</textarea>')

</script>


ここで、たずえばですが、玠人考えで、

<script ID="sc" src="a.js"></script>

ずしお、IDを蚭定し、むベントで
function changeJs(){
document.all['sc'].src='b.js';
}
のような凊理を考えおみたしたが、うたく動きたせん。
この堎合は、実行時にプロパティを蚭定するこずが
できないずいうこずのようです。

他のIEのみのメ゜ッドなどでinnerHTMLのように文字列を
入れかえるこずはできそうですが、実珟したいのは、
配列デヌタそのものをたずめお入れかえるこずです。

䜕かよいアドバむスありたしたら、よろしくお願いいたし
たす。

なお、a.jsおよびb.jsの内容は、

-----[a.js]-------------
var d=new Array()

d[0]='1200';
d[1]='1650';
d[2]='2400';
d[3]='3520';

-----[b.js]-------------

var d=new Array()

d[0]='261ppm';
d[1]='335ppm';
d[2]='582ppm';
d[3]='641ppm';

---------------------


い぀も初歩的な質問ですいたせん。
よろしくお願いいたしたす。


--
板橋


/*********ブラりザ環境********
Appname = Microsoft Internet Explorer
Appversion = 4.0 (compatible; MSIE 4.01; Windows 98)
Broswer = Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
***************************/

ku...@gssm.otsuka.tsukuba.ac.jp

未読、
2003/12/11 3:00:472003/12/11
To:
久野です。

kunit...@h2.dion.ne.jpさん:


> <script src="a.js"></script>
> <script>
> document.write( '<textarea cols="50" rows="30">')
> for(var i=0; i<d.length; i++){
> document.write(' '+ d[i] +'\n');
> }
> document.write( '</textarea>')
> </script>

ずいうこずは。a.jsを読み蟌み、続いおすぐにdocument.write()で
textareaを曞き出しおしたうわけですよね。曞き出しおしたっおから、
埌で

> ずしお、IDを蚭定し、むベントで

むベントに察応しおsrcを差し替えおも配列の䞭身は倉わるでしょう
が曞き出した内容は倉わらないでしょ。textareaの䞭身を倉えたいの
ならそのtextareaのvalueを倉曎しないず。

docment.write()はそういうのには䞍向きです 久野


ITAHASHI Kunio

未読、
2003/12/11 21:09:292003/12/11
To:
久野さん こんにちは。
い぀もすいたせん。

> むベントに察応しおsrcを差し替えおも配列の䞭身は倉わるでしょう
>が曞き出した内容は倉わらないでしょ。textareaの䞭身を倉えたいの
>ならそのtextareaのvalueを倉曎しないず。
>


玍埗です。<body onload=""...>でリロヌドをかけお䜕ずかなるかなず思
っおいたのですが・・・。しかし、
document.formName.TextareaName.value = d ;
で、TEXTAREA内に差し替えたい配列の芁玠を、いわばべた打ちの
圢でコンマ連結で、持っお来るこずはできるのですが、これを敎圢
するにはどうすればよいのかわかりたせん。いろいろ詊しおみたした
が、コントロヌルできないようです。

どなたか、よいアドバむスお願いいたしたす。

--
板橋


Satoshi Nakajima

未読、
2003/12/12 6:47:442003/12/12
To:
ナカゞマず申したす。

板橋さんが䜕をされたいのかよくわからないので、
適切なアドバむスでなければ申しわけありたせん。

以䞋のような゜ヌスは参考になりたせんか


var d=new Array()

function set_a(){


d[0]='1200';
d[1]='1650';
d[2]='2400';
d[3]='3520';
}

function set_b(){


d[0]='261ppm';
d[1]='335ppm';
}

function mojiretu(){
var moji="";
for (var i=0; i<d.length; i++){
moji=moji+' '+ d[i] +'\n';}
alert(moji);
}

var d=new Array()
set_a();
mojiretu();

var d=new Array()
set_b();
mojiretu();


/*
敎圢するこずが問題なのでしたら、
function mojiretu() の䞭の alert を、
document.formName.TextareaName.value = moji
ずすれば、よさそうな気がしたすが。
IE6.0では動䜜確認できたした。 


あるいは、これ
http://www.chem.gunma-ct.ac.jp/sinro.htm
に近いこずをしようずされおいるずか。
 */

ku...@gssm.otsuka.tsukuba.ac.jp

未読、
2003/12/12 8:03:232003/12/12
To:
久野です。

kunit...@h2.dion.ne.jpさん:


> 玍埗です。<body onload=""...>でリロヌドをかけお䜕ずかなるかなず思
> っおいたのですが・・・。しかし、

リロヌドしたら圓然HTMLから読み盎されるから<script>芁玠のsrc属
性も元に戻っお、その倀でdocument.write()されるでしょ。

゜ヌスを自分の垌望的芳枬で解釈しないようにずこないだ私は蚀った
ですよね :-)

> で、TEXTAREA内に差し替えたい配列の芁玠を、いわばべた打ちの
> 圢でコンマ連結で、持っお来るこずはできるのですが、これを敎圢
> するにはどうすればよいのかわかりたせん。いろいろ詊しおみたした
> が、コントロヌルできないようです。

document.write()でなら敎圢できるけど文字列ずしお連結するずきは
敎圢できない、ずいうのも䞍思議です。

document.write(a);
document.write(b);
document.write(c);

する代わりに

result = '';
result += a + "\n";
result += b + "\n";
result += c + "\n";

ずしおこのresultをtextareaのvalueに入れりゃいいんでは。

なかなか興味深い質問ですね :-) 久野

ITAHASHI Kunio

未読、
2003/12/13 6:43:402003/12/13
To:
ナカゞマさん こんばんは。
板橋です。

スクリプトずURLありがずうございたした。
パヌフェクトです
私のしたいこずができたした。


高専のコヌドは配列の芁玠に盎接敎圢をしおいたすが、for文
での蚘述の呌び出しができないでいたした。
ナカゞマさんがお瀺しくださったコヌドは私にはちょっず耇雑な
のですが、むベント化できたした。
私の理解が正しければ、関数で定矩した敎圢コヌドを関数ごず
呌び出しおいるわけですね。今の私にはどうも関数ずいうのが
むマむチ理解䞍足で、このようなコヌドが曞けるようになれるよ
うにもっず頑匵りたいず思いたす。

本圓にありがずうございたした。
たたよろしくお願いいたしたす。


--
板橋 拝

T. Sugita

未読、
2003/12/14 9:32:312003/12/14
To:
すぎたです。

既に解決されおいるようなので、混乱させる元になるかずいう気が
しないでもないのですが、デヌタの読み蟌みずいうのも面癜そう
なので、いく぀か䜜っおみたした。

# 以前、どなたか䟋瀺されおいたず思うのですが、Google の
# fj.comp.lang.javascript が Swen 以来死んだ状態なので・・・

環境
IE5.5sp2 (5.50.4807.2300)
Mozilla Firebird 0.7+ Gecko/20031002


| IE Gecko
-------------+----+-------
1) reload OK OK
2) open-js OK OK(なぜ゚ラヌが発生するかよくわからず)
3) open-html OK OK(なぜ゚ラヌが発生するかよくわからず)
4) frame OK OK(reload時のみ security error)
5) iframe OK OK(reload時のみ security error)
6) script OK NG
7) innerHTML NG NG(なので、゜ヌス無しです)

# IE の方は、ずく゚ラヌは発生したせん。
# DOM に関しおは、詊しおいないです。


共通

=== a.js ===
var aaa = new Array(1, 2, 3);

=== b.js ===
var aaa = new Array(4, 5, 6);


1) reload

=== reload.html ===
<head>
<script>
function parseInput(href,sep1,sep2,sep3) {
if (href == undefined) href = "";
if (sep1 == undefined) sep1 = "?";
if (sep2 == undefined) sep2 = "&";
if (sep3 == undefined) sep3 = "=";

var url = href.split(sep1);
var args = new Array(); // local scope

args[0] = url[0];

if (url.length >= 2) {
var opts = url[1].split(sep2);
for (var i=0; i < opts.length; i++) {
var e = opts[i].split(sep3);
args[e[0]] = (e[1] == undefined ? true : unescape(e[1]));
}
}

if (parseInput.debug) {
var s = "";
for (var i in args)
s += i + ":" + args[i] + "\n";
alert(s);
}

return args;
}

var args = parseInput(location.href); // global scope

function reload(fname) {
location.href = args[0] + "?data=" + fname;
}
function disp(data) {
var txt = document.getElementById("txt");
txt.value = data[0];
}
function init() {
disp(aaa);
}
</script>
</head>
<body onload="init()">
<script>
var fname = (args['data'] ? args['data'] : "a.js");
document.writeln("<script src='" + fname + "'></\script>");
</script>
<textarea id="txt">
</textarea>
<hr>
<input type="button" value="a" onclick="reload('a.js')">
<input type="button" value="b" onclick="reload('b.js')">
<hr>
</body>


2) open-js

=== open-js.html ===
<head>
<script>
function load_data(fname) {
var w = open("about:blank","data","width=400,height=50");
w.document.open();
w.document.writeln("<p>just a moment.</p>");
w.document.writeln("<script src='" + fname + "'></\script>");
w.document.writeln("<script>");
w.document.writeln("opener.load_finish(self, aaa);");
w.document.writeln("</\script>");
w.document.close();
}
function load_finish(w,data) {
disp(data);
w.close();
}
function disp(data) {
var txt = document.getElementById("txt");
txt.value = data[0];
}
function init() {
load_data('a.js');
}
</script>
</head>
<body onload="init()">
<textarea id="txt">
</textarea>
<hr>
<input type="button" value="a" onclick="load_data('a.js')">
<input type="button" value="b" onclick="load_data('b.js')">
<hr>
</body>


3) open-html

=== open-html.html ===
<head>
<script>
function load_data(fname) {
open(fname,"data","width=400,height=50");
}
function load_finish(w,data) {
disp(data);
w.close();
}
function disp(data) {
var txt = document.getElementById("txt");
txt.value = data[0];
}
function init() {
load_data("a.html");
}
</script>
</head>
<body onload="init()">
<textarea id="txt">
</textarea>
<hr>
<input type="button" value="a" onclick="load_data('a.html')">
<input type="button" value="b" onclick="load_data('b.html')">
<hr>
</body>

=== a.html ===
<head>
<script>
var aaa = new Array(1, 2, 3);
function finish() {
opener.load_finish(self, aaa);
}
</script>
</head>
<body onload="finish()">
<p>just a moment.</p>
</body>

=== b.html ===
<head>
<script>
var aaa = new Array(4, 5, 6);
function finish() {
opener.load_finish(self, aaa);
}
</script>
</head>
<body onload="finish()">
<p>just a moment.</p>
</body>


4) frame

=== frame.html ===
<frameset cols="100%,*" frameborder="no">
<frame name="main" src="frame-main.html">
<frame name="data" src="about:blank">
</frameset>

=== frame-main.html ===
<head>
<script>
function load_data(fname) {
top.data.document.open();
top.data.document.writeln("<script src='" + fname + "'></\script>");
top.data.document.close();
setTimeout("disp(top.data.aaa)", 0);
}
function disp(data) {
var txt = document.getElementById("txt");
txt.value = data[0];
}
function init() {
load_data('a.js');
}
</script>
</head>
<body onload="init()">
<textarea id="txt">
</textarea>
<hr>
<input type="button" value="a" onclick="load_data('a.js')">
<input type="button" value="b" onclick="load_data('b.js')">
<hr>
</body>


5) iframe

<head>
<script>
function load_data(fname) {
data.document.open();
data.document.writeln("<script src='" + fname + "'></\script>");
data.document.close();
setTimeout("disp(data.aaa)", 0);
}
function disp(data) { // local scope
var txt = document.getElementById("txt");
txt.value = data[0];
}
function init() {
load_data('a.js');
}
</script>
</head>
<body onload="init()">
<textarea id="txt">
</textarea>
<hr>
<input type="button" value="a" onclick="load_data('a.js')">
<input type="button" value="b" onclick="load_data('b.js')">
<hr>
<iframe name="data" style="height:0; display:none"></iframe>
<!-- どちらでも可
<iframe name="data"
style="height:0; left:0; top:0; position:absolute; visibility:hidden">
</iframe>
-->
</body>


6) script

<head>
<script>
function load_data(fname) {
var data = document.getElementById("data");
data.src = fname;
setTimeout("disp(aaa)", 0);
}
function disp(data) { // local scope
var txt = document.getElementById("txt");
txt.value = data[0];
}
function init() {
load_data('a.js');
}
</script>
</head>
<body onload="init()">
<textarea id="txt">
</textarea>
<hr>
<input type="button" value="a" onclick="load_data('a.js')">
<input type="button" value="b" onclick="load_data('b.js')">
<hr>
<script id="data" src="a.js"></script>
</body>

# 曞いおる途䞭でちょっず線集したので、間違っおたらご容赊ください。


ちょっず関係ないですが、Gecko で、フレヌム内で iframe を利甚し、
onload で document.write() を利甚しお初期化しようずするず、
document.close() しおいるにもかかわらず、読み蟌みが終了しない
ずいう珟象が発生しおいたした。
button 等の onclick か、フレヌムでなく盎接開いた堎合の初期化
の堎合は問題なかったです。

--
杉田
sugi...@bk.iij4u.or.jp

koun...@mbh.nifty.com

未読、
2003/12/15 2:48:272003/12/15
To:
こんにちわ。もう解決しおいる䞊に杉田さんがいく぀かの䟋を瀺されおいるので
䜙蚈な蚘事だずは思いたすが。枯れ朚も山のにぎわいずいうこずで。

最初に板橋さんの蚘事を芋たずき本䜓ずデヌタ郚分は分けおデヌタに倉曎や远加
がある堎合はデヌタ郚分の倉曎で察応したいのかなず思いたした。そこで远加
デヌタがある堎合にはa.jsずかb.jsずかにデヌタファむルを分割するのではなく
デヌタファむルはa.js぀にたずめおそこでデヌタの远加や倉曎をする方法ではどう
なのかずちょっず考えおみたした。

本䜓の内容。
-------------------------------------------------------
<html>
<body>
<script src="a.js"></script>

<script>
function dispdata(x)
{
var s = "";
for(i=0; i < x.length; i++)
s = s+x[i]+"\n";
document.form.txt.value = s;
}
</script>

<form name = "form">
<select name = "mymenu"
onChange="dispdata(getdata(this.form.mymenu.selectedIndex))">
<script>
document.write(str);
</script>
</select>
<textarea name = "txt" rows = 30 cols = 30>
</textarea>
</form>

</body>
</html>
---------------------------------------------------------

a.js デヌタファむルの内容

function getdata(index)
{
var x;
if (index == 0) {x = a;}
if (index == 1) {x = b;}
if (index == 2) {x = c;}
// hogeデヌタを远加する堎合以䞋を远加。
// if (index == 3) {x = hoge;}
return x;
}

var str = "<option> aデヌタ\
<option> bデヌタ\
<option> cデヌタ"
// hogeデヌタを远加の堎合は最埌の行を䞋蚘のように蚂正し付け加える。
// <option>は連続しお蚘茉。途䞭にコメント等を入れるず動かない。
//<option> cデヌタ\
//<option> hogeデヌタ"

var a = new Array('1200', '1650', '2400', '3520');
var b = new Array('261ppm', '335ppm', '582ppm', '641ppm');
var c = new Array("abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx");
// hogeデヌタを远加する堎合。
// var hoge = new Array("テスト", "詊隓");
----------------------------------------------------------------

--
******************************
keizi kounoike
******************************

Satoshi Nakajima

未読、
2003/12/15 8:49:362003/12/15
To:
板橋さん、こんにちは

ナカゞマです。

> 高専のコヌドは配列の芁玠に盎接敎圢をしおいたすが、for文
> での蚘述の呌び出しができないでいたした。

こんな感じではいかがですか。


myData = new Array(
"0-0\n0-1\n0-2\n0-3\n0-4\n0-5\n0-6\n0-7",
"1-0\n1-1\n1-2\n1-3\n1-4\n1-5\n1-6\n1-7",
"2-0\n2-1\n2-2\n2-3\n2-4\n2-5\n2-6\n2-7",
"3-0\n3-1\n3-2\n3-3\n3-4\n3-5\n3-6\n3-7"
);

for (var k=0; k<myData.length; k++){
var d=myData[k];
for (var i=0; i<d.split("\n").length; i++){
alert(d.split("\n")[i]);}
}


==
Satoshi Nakajima 䞭島 敏
mailto:naka...@chem.gunma-ct.ac.jp

ITAHASHI Kunio

未読、
2003/12/16 1:47:492003/12/16
To:
ナカゞマさん こんにちは
板橋です。

コヌドすいたせん。なるほど、


var d=myData[k];
for (var i=0; i<d.split("\n").length; i++){

........
........
なんおこずができるんですね。こういう発想は湧きたせん。
参考になりたす。ありがずうございたした。


ずころで、・・・
たたたた、カベにぶち圓たっおしたいたした。
敎圢を蚘述したステヌトメントのある関数を呌び出しおデヌタ
衚瀺の切り替えをする堎合、テストでボタンクリックのむベント
を䜿っおためしお、なるほど玍埗ず思ったのですが、実際のむ
べントは切り替え数が倚いので<SELECT>が郜合よいのです。
そこで<SELECT>のコヌドを曞いおみたのですが、関数の呌び
出し方がうたくできたせん。

/*デヌタ配列*/
var d1 = new Array();
d1[0] = "3658";
d1[1] = "2641";
.................
.................

var d2 = new Array();
d2[0] = "236ppm";
d2[1] = "157ppm";
.................
.................

ずしお、それぞれに


function F1(){
//敎圢
}


function G1(){
//敎圢
}

ず぀の関数を䜜り、この関数をonchangeむベントで切り替えお
呌び出すのにはどう曞けばいいのでしょうか。
onclick="F1()"などで個別に呌び出すのは簡単なのですが、
<SELECT>のonchangeだず難しいです。いろいろやっおみたした
が、オブゞェクトじゃないずかで、うたく曞くこずができたせん。
split()で分けた倉数をそれぞれvalueずtextにふりわけ、value倀
をonchangeの関数名ず関連させるずかのやり方をしたりしたした
䜕ず蚀われるか分かっおいるので、私の曞いたコヌドは省略し
たす。

䜕かアドバむスありたしたらお願いいたしたす。

--
板橋


ku...@gssm.otsuka.tsukuba.ac.jp

未読、
2003/12/16 3:25:152003/12/16
To:
久野です。

kunit...@h2.dion.ne.jpさん:


> onclick="F1()"などで個別に呌び出すのは簡単なのですが、<SELECT>
> のonchangeだず難しいです。いろいろやっおみたしたが、オブゞェク
> トじゃないずかで、うたく曞くこずができたせん。split()で分けた
> 倉数をそれぞれvalueずtextにふりわけ、value倀をonchangeの関数名

> ず関連させるずかのやり方をしたりしたした(䜕ず蚀われるか分かっ
> おいるので、私の曞いたコヌドは省略したす)。

䜕ず蚀われるんですか(笑)。それを拝芋するから面癜いのであっお
自分のやったこずを出さないで正解だけくれずいうのは私から芋たら
぀たらないです。

そもそもなんで関数を2぀にするんですか。関数は1぀で、その䞭で
select芁玠の䜕番目が珟圚遞ばれおいるかを参照しお必芁なデヌタを
凊理する、ずいうのが普通だず思いたす。

たあ普通じゃなくやっおもいいけど 久野

ITAHASHI Kunio

未読、
2003/12/16 7:45:332003/12/16
To:
鎻池さん こんばんは

い぀もありがずうございたす。
<SELECT>のナビずないアタマ絞っお栌闘しおいお、鎻池さんの
蚘事を拝読したのが、たったいたでした。
そしたら、なんず
私が倜も寝ないで、出来ない出来ないず悪戊苊闘しおいたスクリ
プトを曞いおいただいおるではありたせんか。
たさに完璧です。これしたかったんです

ありがずうございたした。
それにしおも、コヌドを拝芋するず、やはり私の独力では無理で
した。onchangeは、なるほど、ずようやく分析できる皋床です。
こんなスクリプトが曞けるようになる日が来るんでしょうか。
それにしおも、すごいですね。

たた疑問が湧くかもですが、取り急ぎ、お瀌たで。
䞋手な説明から私の意図をちゃんず汲んで頂いおずおもうれしい
です。本圓にありがずうございたした。

--
板橋 拝

杉田さんにも、同じこず申し䞊げなければならないかも、です。
アタマが疲れおいお、コヌドが食傷気味なので、たた、投皿
したす。すいたせん、杉田さん。この堎を借りお・・・。m(_ _)m

それにしおも、ばかデカむ゚ッチ系の迷惑投皿なんずかならな
いですかヘッダヌをダりンロヌドしおから、蚘事をたた取り
盎しおいたす。䜕が面癜いんだろうか、こんなこずしお。


ITAHASHI Kunio

未読、
2003/12/16 19:45:182003/12/16
To:
朝のすっきりしたずころでよくみおみたした。

うヌん。残念ですが、よく芋るず、鎻池さんのスクリプトも
基本的には高専のコヌドず同じように思いたす。
ナカゞマさんが曞いおくれおいるような*関数を呌び出す*
のに<SELECT>を䜿うにはどうすればいいのでしょうか。
やっぱ無理なのかな


--
板橋

ITAHASHI Kunio

未読、
2003/12/16 20:40:172003/12/16
To:
板橋です。

やっぱアタマ、スッキリしおなかったです。
蚘事キャンセルしたしたが・・・すいたせん。
.

ITAHASHI Kunio

未読、
2003/12/17 7:34:172003/12/17
To:
杉田さん こんばんは
い぀もありがずうございたす。

ずおも勉匷になりたした。
特に、番目の


<script id="data" src="a.js"></script>

の型の䟋は私が圓初考えおいたものず同じような
ので、ずおも興味をもっお拝芋いたしたした。
document.getElementById("data")などはIE甚に
曞き換えお実行させおみたしたが、残念ながら、こ
のスクリプトでも私が詊みおいたずきのように、私の
ブラりザは

「実行時にプロパティを蚭定するこずはできたせん」

ずいう゚ラヌを出しおしたいたす。
でも、これが出来たらいちばんクヌルなスクリプト
だず思いたす。


番目も新鮮でした。なるほど、です。倖郚だけじゃ
ないのですね。

いろいろい぀も瀺唆に富むアドバむスありがずうご
ざいたす。たたよろしくお願いいたしたす。

--
板橋 拝

T. Sugita

未読、
2003/12/18 18:14:562003/12/18
To:
すぎたです。

# 忘幎䌚シヌズンなので、応答は結構遅れたす。m(_ _)m

In message news:dTxDb.1907$747...@news1.dion.ne.jp
"ITAHASHI Kunio" <kunit...@h2.dion.ne.jp> wrote ...

> var d=myData[k];
> for (var i=0; i<d.split("\n").length; i++){
> ........
> ........
> なんおこずができるんですね。こういう発想は湧きたせん。

ちょっず気になるずころなのですが、もし発想ずいうのが
以䞋の郚分ずいうこずであれば、

> for (var i=0; i<d.split("\n").length; i++){

ここは、

var n = d.split("\n").length;
for (var i=0; i < n; i++){

ず眮き換えおも同じこずで、圢匏ずしおは䞀般的なものです。
衚珟方法より、意味に沿っお考えた方がわかりやすいず思いたす。


> ず぀の関数を䜜り、この関数をonchangeむベントで切り替えお
> 呌び出すのにはどう曞けばいいのでしょうか。
 略 
> 䜕ず蚀われるか分かっおいるので、私の曞いたコヌドは省略し
> たす。

プログラムは、フロヌチャヌトずいった蚀葉からもわかる通り、
テクニックを駆䜿するずいうよりは流れを考える䜜業ですので、
たずえ間違っおいおも、党䜓のコヌドからわかるこずも倚いものです。
(流れの䞭での(自分なりの)必然を探す䜜業ず蚀った方が良いのかな)

呌び出し先ず呌び出し元をセットにした簡単なモデルがあるず、
蚀葉だけよりは、より倚くのこずが䌝わりたすので、ぜひコヌド
を提瀺された方が良いかず思いたす。

select の件ですが、久野さんから回答が瀺されおいたすが、補足です。

select に぀いお、たずえばプルダりン匏のメニュヌの堎合、N個の
遞択肢があったずしお、操䜜の面から蚀うず、メニュヌを遞択(クリック)
しお遞択肢ずなる項目を衚瀺し、目で確認しお、䜕番目かの項目を
遞択したす。
そしお、select には、䜕番目を遞択したかずいう情報がセットされ、
各項目には、個別に識別できる情報をあらかじめセットできたす。

䜕番目を遞択したかずいう情報は selectedIndex に保存されおいるので、
ごく簡単に曞くず、

<script>
function chgsel(obj) {
window.status = obj.selectedIndex;
}
</script>
<select onchange="chgsel(this)">
<option>A
<option>B
</select>

のようにしお、なにが遞択されたのかを知るこずができたす。
ただ、これだず遞択項目を倉曎した堎合にいちいち順番を確認する
必芁があるため、各項目に情報を持たせお、

<script>
function chgsel(obj) {
window.status = obj[obj.selectedIndex].value;
}
</script>
<select onchange="chgsel(this)">
<option value="aa">A
<option value="bb">B
</select>

のようにしお、情報を取り出すこずも可胜です。
# 敎合性さえ保っおいれば良いので、selectedIndex だけで
# やっおしたっおも、党然問題ないです。

識別するには、if 文で曞くず

var val = obj[obj.selectedIndex].value;
if (val == "aa") {
window.status = "AA";
} else if (val == "bb") {
window.status = "BB";
}

のようになりたすし、switch 文を䜿うず

switch (val) {
case "aa":
window.status = "AA";
break;
case "bb":
window.status = "BB";
break;
}

のようになりたす。
switch 文の方がわかりやすいかは人それぞれですが、
実珟するだけなら if 文でも十分です。
# 結局は同じこずですし

耇数のデヌタを扱う堎合、2次元配列にしお

var table = new Array();
table[0] = new Array();
table[0][0] = "A0";
table[0][1] = "A1";
table[1] = new Array();
table[1][0] = "B0";
table[1][1] = "B1";

ずしお、

var data = table[obj.selectedIndex];
window.status = data[0];

のように利甚するずか、value で匕き出した倀の利甚を前提に

var table = new Array();
table["aa"] = new Array();
table["aa"][0] = "A0";
table["aa"][1] = "A1";
table["bb"] = new Array();
table["bb"][0] = "B0";
table["bb"][1] = "B1";

ず蚭定しおおいお、

var data = table[obj[obj.selectedIndex].value];
window.status = data[0];

でも良いかず思いたす。

# どちらの堎合も、゚ラヌ(倀範囲倖の)凊理は蚘述しおたせんので、
# 敎合性は保぀必芁がありたす。

--
杉田
sugi...@bk.iij4u.or.jp

ITAHASHI Kunio

未読、
2003/12/21 1:11:152003/12/21
To:
杉田さん 解説ありがずうございたす。


>> なんおこずができるんですね。こういう発想は湧きたせん。
>
>ちょっず気になるずころなのですが、もし発想ずいうのが
>以䞋の郚分ずいうこずであれば、
>
>> for (var i=0; i<d.split("\n").length; i++){
>
>ここは、
>
> var n = d.split("\n").length;
> for (var i=0; i < n; i++){
>
>ず眮き換えおも同じこずで、圢匏ずしおは䞀般的なものです。
>衚珟方法より、意味に沿っお考えた方がわかりやすいず思いたす。
>

なるほど。単にそういうこずだったんですね。玠人なものですから、
圢に惑わされおしたうず、あヌ、すごいなあ、ず感心しおしたいたす。

for文ずいえば、私的にずヌっず未解決なこずがあるのですが、ちょ
っずご助蚀いただけたすでしょうか。できれば、今の問題に取り入
れられたら、いいのですが・・・。
配列デヌタの䞭の任意の芁玠を切り出すずいう問題です。
たずえば、

var x = new Array('',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9'
);

ずいう配列デヌタが䞎えられおいお、いた、この䞭の任意の芁玠、
'2', '3', '4, '7', '8', '9' ずいう぀の文字列を切り出しお衚瀺するずい
うコヌドを曞く、ずいうずき、for文を぀䜿っお文字列を連結させる
ずいう考え方でのコヌドは曞けるのですが、*぀のfor文*で曞き
出すこずはできたすでしょうか。

for(i=2,i<5;i++) || (i=7;i<10;i++)){
document.write(i+'<br>')
}

たたは、

for(i=2;((i<5)||(i>=7&&i<10));i++){
.................
}

もしくは、

for(i=2?;i<5:i=7?;i<10:null;i++){
..................
}

ずいうような具合で。
それが出来れば぀の配列を経枈的に䜿えるのですが。
ご教瀺お願いいたしたす。


--
板橋

ITAHASHI Kunio

未読、
2003/12/21 1:29:292003/12/21
To:
/*
var x = new Array('', を var x = new Array( に蚂正しおキャンセルのうえ再
送したす。すいたせん。
*/


杉田さん 解説ありがずうございたす。


>> なんおこずができるんですね。こういう発想は湧きたせん。
>
>ちょっず気になるずころなのですが、もし発想ずいうのが
>以䞋の郚分ずいうこずであれば、
>
>> for (var i=0; i<d.split("\n").length; i++){
>
>ここは、
>
> var n = d.split("\n").length;
> for (var i=0; i < n; i++){
>
>ず眮き換えおも同じこずで、圢匏ずしおは䞀般的なものです。
>衚珟方法より、意味に沿っお考えた方がわかりやすいず思いたす。
>

なるほど。単にそういうこずだったんですね。玠人なものですから、
圢に惑わされおしたうず、あヌ、すごいなあ、ず感心しおしたいたす。

for文ずいえば、私的にずヌっず未解決なこずがあるのですが、ちょ
っずご助蚀いただけたすでしょうか。できれば、今の問題に取り入
れられたら、いいのですが・・・。
配列デヌタの䞭の任意の芁玠を切り出すずいう問題です。
たずえば、

var x = new Array(

Satoshi Nakajima

未読、
2003/12/21 7:25:072003/12/21
To:
ナカゞマです。


板橋さんこんばんは。

for(i=2;((i<5)||(i>=7&&i<10));i++){

// 凊理
alert(i);
}

を実行した時、䜕が起きたかを考えれば、理解しやすいず思うのですが。

for ( 初期倀; 条件匏; 増枛匏 ) { 凊理 }
は、条件匏が成立しおいる間、凊理を行い、増枛匏に埓っおカりンタ(iなどを増枛した
す。぀たり、䞊の゜ヌスを実行させるず、
i=2 これは、条件 ((i<5)||(i>=7&&i<10)) が真なので、凊理を行い、i を増したす。
i=3 同じく、条件は真。凊理を行い、i を増したす。
i=4 同じく、条件は真。凊理を行い、i を増したす。
i=5 ここで、条件は停ずなるので、凊理は行われず、ルヌプを終了したす。

぀たり、条件匏のORより埌半(i>=7&&i<10)は、関係なくなりたすね。
条件匏のずころを替えるのではなく、増枛匏を工倫しお、

for(i=2;i<10;(i=i+1+(i==4)*2)){
alert(i);
}

ずする方法はありたすが、これはいかにもトリッキヌです。
ie6.0/win98 では動きたしたが、真1 ず扱うかどうかは、
保蚌されおいないず思うので、䞊の゜ヌスは止めずいた方が
いいんではないかず思いたす。この蟺りの事情は詳しく
ありたせん。m(__)m

板橋さんのやりたいこずを玠盎に行うなら、

for(i=2;i<10;i++){
if ((i<5)||(i>=7&&i<10)) {

// 凊理

};
}

ずするのが普通だず思いたす。カりンタ倉数 i は、ず぀増えたすが、条件を満たさな
い時は、凊理が行われないように曞いおありたす。

Satoshi Nakajima

未読、
2003/12/21 8:24:262003/12/21
To:
ナカゞマ自己レス です。


あちゃあ、誰かに぀っこたれる前に。(^^;


その。真停を数倀化するためには、条件挔算子を
䜿えばよかったんですね。

for(i=2;i<10;(i+=(i==4?3:1))){
alert(i);
}

䞀応、これでプラットフォヌムを遞ばないはず、ですよね。笑


その。for  next ルヌプっお 。
BASIC出身だもんで。蚱しおください。m(__)m

"Satoshi Nakajima" <naka...@chem.gunma-ct.ac.jp>
wrote in message news:bs42mm$5b$1...@x1wa.gunma-ct.ac.jp...





ITAHASHI Kunio

未読、
2003/12/21 8:26:072003/12/21
To:
ナカゞマさん こんばんは。
たびたびですいたせん。

䞁寧に解説しおくださり、ありがずうございたした。
おかげで、疑問氷解です。やっぱ、私は基本的な欠萜があるらしく、
劙なずころをいじくり回しおいたした。ルヌプはそのたたにしお、if()で
やる。なるほどです。これなら奜きなように取り出せたすね。
杉田さんもおっしゃっおいたしたが、
>衚珟方法より、意味に沿っお考えた方がわかりやすいず思いたす。
ずいうこず、本圓にそうだず思いたす。指針にしたいず思いたす。
玠盎さや基本に忠実ずいうこずは、䜕でもそうですが、本圓はかなり
実力がないず出来ないこずですよね。
がんばりたす。


きょうは有意矩でした。ありがずうございたした。
たたよろしくお願いいたしたす。

--
板橋 拝

T. Sugita

未読、
2003/12/21 10:42:402003/12/21
To:
すぎたです。

In message news:bs42mm$5b$1...@x1wa.gunma-ct.ac.jp
"Satoshi Nakajima" <naka...@chem.gunma-ct.ac.jp> wrote ...

> for(i=2;i<10;i++){
> if ((i<5)||(i>=7&&i<10)) {

同じこずなのですが、むンデントが深くなるこずを嫌う堎合ずかに
continue を䜿っお凊理をずばすずいう方法もありたす。
# たたに continue や break を嫌う人もいるみたいですが、
# 私はよく䜿いたす。

for (i=2; i < 10; i++) {
if (i == 5 || i == 6) {
continue; // 5 か 6 であれば、ルヌプ内の凊理をずばす
}

 凊理 

}


数が少ないのであれば、むンデックスを配列にしお
取り出すのも手です。

var idxs = new Array(2, 3, 4, 7, 8, 9);
var n = idxs.length;
for (var j=0; j < n; j++) {
i = idxs[j];

 凊理 

}


もずもずの意図ずしお、耇数のルヌプ範囲で同じ凊理を通過したい
(ので2぀のfor文を1぀で行いたいずのこずでしたが、構文がない)
ずいう凊理をそのたた実珟する堎合、その範囲を配列にしお
2重のルヌプで、倖偎で耇数の範囲テヌブルの読み出し、内偎
でその範囲のルヌプの凊理を蚘述する手もありたす。

var ranges = new Array(
new Array(2, 4),
new Array(7, 9)
);
/* わかりづらければ
var ranges = new Array();
ranges[0] = new Array(2, 4);
ranges[1] = new Array(7, 9);
*/
var i, j, r;
var n = ranges.length; // この堎合 2
for (j=0; j < n; j++) {
r = ranges[j]; // 範囲の読み出し
for (i=r[0]; i <= r[1]; i++) { // 芁玠の[0][1]たで

 凊理 

}
}

--
杉田
sugi...@bk.iij4u.or.jp

Satoshi Nakajima

未読、
2003/12/21 22:30:552003/12/21
To:
板橋さん、杉田さん、こんにちは


ナカゞマです。

少なくずも ie6.0/win98 の僕の環境では増枛匏のずころに、
関数を甚いおも倧䞈倫なようです。

わざわざ関数を呌び出すず、むンデントが深くなる問題は
本質的には避けられおいないような気もしたすが、
盎感的には、同皋床にわかりやすいような気もしたすので、
玹介だけ。


function incre(i){
do
i++;
while ((i<5||i>=7)==false)
return i;
}

for(i=2;i<10;i=incre(i)){
// 凊理
alert(i);
}

/*
while ((i<5||(i>=7&&i<10))==false)
ずしおしたうず、i=9 の時の凊理の埌、増枛匏に埓っお
i=10 ずなった時点で、無限に i++がくり返される。
for文の刀定にかかる前に無限ルヌプにはたっおしたう。
*/

koun...@mbh.nifty.com

未読、
2003/12/22 7:44:522003/12/22
To:
"Satoshi Nakajima" <naka...@chem.gunma-ct.ac.jp> wrote in message
news:bs5nov$lnq$1...@x1wa.gunma-ct.ac.jp...

> 少なくずも ie6.0/win98 の僕の環境では増枛匏のずころに、
> 関数を甚いおも倧䞈倫なようです。
>

ECMA 262 の芏栌に準拠しおいるなら関数でもよいずいうのは䞍思議でもないず思
いたす。
ただ次のようなものも䞀応動くようですがこれが正垞な動䜜ず蚀い切れるような
var i のスコヌプに぀いお明確に蚘茉されたものはあるのでしょうか。ちょっず調
べたけど芋぀けれたせんでした。

var x = new Array('0','1','2','3','4','5','6','7','8','9');

document.write('---not recommend---' + '<BR>');
for(var i = 2; i < x.length; i++){
if (i == 5) i = 7;
document.write(x[i] + '<BR>');
}

document.write('-----i = incre()------' + '<BR>');
for(var i = 2; i < x.length; i = incre()){
document.write(x[i] + '<BR>');
}

document.write('------incre()-------' + '<BR>');
for(var i = 2; i < x.length; incre()){
document.write(x[i] + '<BR>');
}

document.write('------incre1()-------' + '<BR>');
for(var i = 2; i < x.length; incre1()){
document.write(x[i] + '<BR>');
}

function incre(){
do
i++;
while (!(i < 5 || i >= 7))
return i;
}

function incre1(){ // return文なし
do
i++;
while (!(i < 5 || i >= 7))
}

あっ䞀番䞊のはvar i のスコヌプずはなんの関係もありたせん。ただ盎接倉数var
i をいじっおも動くには動くずいうだけです。もちろん䜙皋の時でないずやりた
せんが
それから圓然ですが
for(var i = 2; i < x.length; incre(i))
ずしたのでは氞久にが倉化しないので動きたせんが。

Satoshi Nakajima

未読、
2003/12/22 9:47:132003/12/22
To:
kounoike さん、こんばんは


ナカゞマです。的倖れなフォロりでなければ良いですが (^^;

関数の匕数のスコヌプに関しお調べおみたした。

http://www5a.biglobe.ne.jp/~n_rieko/javascript/8.htm

/* 匕甚ココペリ

NetscapeNavigatorではvarを䜿い宣蚀した堎合その倉数は宣蚀された堎所に限らず党おグ
ロヌバル倉数になりたす。逆に蚀えばNetscapeNavigatorでは関数の䞭でvarを付けないで
宣蚀した倉数以倖党おグロヌバル倉数ずなりたす。

InternetExploreでは関数の䞭で宣蚀した倉数は党おその関数のみのロヌカル倉数ずなり
たす。関数の倖で宣蚀した倉数は党おグロヌバルな倉数ずなりたす。

 匕甚ココマデ */


ずのこずですので、kounoikeさんの曞かれたいずれの関数においおも、i はグロヌバル倉
数関数倖からも参照可胜ずなるようです。

kounoikeさんの関数のうち、増枛匏が「incre()」「incre1()」の䜿い方は、i がグロヌ
バル倉数であるこずを前提ずしお、関数内で倉化した i を参照する圢で曞かれおいたす
し、たた、「i = incre()」の䜿い方も、関数に匕数がないこずから、i がグロヌバル倉
数であるこずを暗黙に芁求しおいたす。
その意味では「これが正垞な動䜜」であるず蚀っおいいのではないでしょうか。i が
ロヌカル倉数であった堎合には動䜜しない「仕様」で曞かれおいる、ずいうのは、この堎
合、関数の䞭のみ i を j で眮き換えた堎合に䜜動しないずいう意味です。


<koun...@mbh.nifty.com> wrote
in message news:bs6p8o$osf$1...@news511.nifty.com...

 

 

T. Sugita

未読、
2003/12/23 3:35:442003/12/23
To:
すぎたです。

In message news:bs6p8o$osf$1...@news511.nifty.com
<koun...@mbh.nifty.com> wrote ...

> ただ次のようなものも䞀応動くようですがこれが正垞な動䜜ず
> 蚀い切れるような var i のスコヌプに぀いお明確に蚘茉されたもの
> はあるのでしょうか。ちょっず調べたけど芋぀けれたせんでした。

ECMA-262 のスコヌプっお、あちこちに曞いおあるんですよね。
たぶん関連するのは
10.1.3
10.1.4
10.2.*
12.2
13
あたりかな・・・(英語なので、付き(^^;;)

JavaScript のスコヌプはブロックスコヌプではないですし、
倉数領域は動的に確保(生成)されるわけで、this を意識しお、
継承時のプロパティず同じで、遡っおその領域をアクセスする
ずいう考え方で良いのではないかず思いたす。

--
杉田
sugi...@bk.iij4u.or.jp

koun...@mbh.nifty.com

未読、
2003/12/24 6:11:492003/12/24
To:
"T. Sugita" <nws-...@bp.iij4u.or.jp> wrote in message
news:bs8vke$msl$1...@news00.iij4u.or.jp...

> すぎたです。
>
> In message news:bs6p8o$osf$1...@news511.nifty.com
> <koun...@mbh.nifty.com> wrote ...

> ECMA-262 のスコヌプっお、あちこちに曞いおあるんですよね。


> たぶん関連するのは
> 10.1.3
> 10.1.4
> 10.2.*
> 12.2
> 13
> あたりかな・・・(英語なので、付き(^^;;)

ナカゞマさん杉田さん情報ありがずうございたす。で至った結論はforにおけ
るvar iは䜿甚される堎所によりグロヌバルにもなるしfunction localでもある
ずいうこずですかね。ずいうのも䞋の堎合increout() の倉数 i が宣蚀されおいな
い状態のようなので。
ずもかくECMA-262の芏栌っおよう分からんずいうのが正盎な感想です。もっず分
かりやすくそれぞれの説明に䟋でも付けおくれればいいのに。この芏栌の解説曞みた
いなのは無いのかな。むンタヌプリタヌ蚀語の䞭でももやもやずしたはっきりし
ない仕様私にずっおに思えお仕方ない。蚀語構造を理解した䞊で䜿うには盞圓難
しいず感じたす。読めば読むほど分からなくなる私にずっおは厄介な蚀語です。

var x = new Array('0','1','2','3','4','5','6','7','8','9');

fortest();

function fortest() {
function increin() {


do
i++;
while (!(i < 5 || i >= 7))
return i;
}

document.write('------increin()-------' + '<BR>');
for(var i = 2; i < x.length; increin()) {


document.write(x[i] + '<BR>');
}

document.write('------increout()-------' + '<BR>');
for(var i = 2; i < x.length; increout()) {


document.write(x[i] + '<BR>');
}
}

function increout() {


do
i++;
while (!(i < 5 || i >= 7))
return i;
}

--
******************************
keizi kounoike
******************************

Satoshi Nakajima

未読、
2003/12/24 7:31:562003/12/24
To:
kounoike さん、こんばんは


<koun...@mbh.nifty.com> wrote in message news:bsbsi8$b7i$1...@news511.nifty.com...

> ずもかくECMA-262の芏栌っおよう分からんずいうのが正盎な感想です。もっず分
> かりやすくそれぞれの説明に䟋でも付けおくれればいいのに。この芏栌の解説曞みた
> いなのは無いのかな。むンタヌプリタヌ蚀語の䞭でももやもやずしたはっきりし
> ない仕様私にずっおに思えお仕方ない。蚀語構造を理解した䞊で䜿うには盞圓難
> しいず感じたす。読めば読むほど分からなくなる私にずっおは厄介な蚀語です。

kounoike さんの曞かれる関数「increin()」「increout()」ずもに、「return i」で倉数
i を返す圢で曞いおおきながら、実行の段階では、「i = 関数」ずせずに、単に関数
を実行しおいる点で、仕様倖の曞き方かな、ず感じおしたうずころはありたす。倉数がグ
ロヌバルであるこずを期埅しお、関数の実行により倉数を倉化させおおいおそれを倖から
参照しようずしおいるなら、return 文が意味を為さないず思うのです。

もずもず「もやもやずしたはっきりしない仕様」なのは、そういう仕様なのだからしよう
がないのでしょうが、僕はその蟺のようわからんずころは諊めおしたっお、始めから倉数
がロヌカルであるものずしお曞いおおけばブラりザが倉わったりしおもたあ倧䞈倫かなず
いうのが僕の思うずころです。倉数がグロヌバルだず動䜜が倉わっおしたうような堎面
があったずしお、その時は別の文字で曞いおおけば倧䞈倫でしょうし。

kounoike さんはきっずお刀りの䞊で、動かない゜ヌス䟋を挙げられたのでしょうが、念
のため、動くはずの゜ヌスも曞いおおきたす。ロヌカル倉数であるこずを匷調しお、
k, j を䜿っおいたすが、i で曞いおも動くはずです。


var x = new Array('0','1','2','3','4','5','6','7','8','9');

fortest();

function fortest() {
function increin(k) {
do
k++;
while (!(k < 5 || k >= 7))
return k;
}

document.write('------increin()-------' + '<BR>');

for(var i = 2; i < x.length; i=increin(i)) {


document.write(x[i] + '<BR>');
}

document.write('------increout()-------' + '<BR>');

for(var i = 2; i < x.length; i=increout(i)) {


document.write(x[i] + '<BR>');
}
}

function increout(j) {
do
j++;
while (!(j < 5 || j >= 7))
return j;
}

T. Sugita

未読、
2003/12/24 11:52:232003/12/24
To:
すぎたです。

In message news:bsbsi8$b7i$1...@news511.nifty.com
<koun...@mbh.nifty.com> wrote ...

> ナカゞマさん杉田さん情報ありがずうございたす。で至った結論はforにおけ
> るvar iは䜿甚される堎所によりグロヌバルにもなるしfunction localでもある
> ずいうこずですかね。

for における var i に限ったこずではなく、
var i がグロヌバルに珟れるず、global に生成される。
var i が関数の䞭に珟れるず、その関数内で local scope が生成される。
(ロヌカルにメモリが確保される)
block scope ではないので、新たな関数内でなければ、耇数回珟れるず、
新たに生成(ず開攟)され、スコヌプ範囲は同じ範囲ずなる。
i を䜿甚する際、ロヌカルスコヌプに無ければ、最倧、グロヌバルたで
遡っお怜玢する。
(䟋の increout() だず、グロヌバルには i は無いので゚ラヌで止たっおいる)
ずいうこずじゃないかず思いたす。

ロヌカルに蚘述した倉数ぞのアクセスに関しおは、new を䜿った際に
結構䟿利で、よく利甚されたすよね。
# あたり適切ではありたせんが・・・

function Obj() {
var s = 0;
this.init = function (v) {
s = v;
}
this.add = function (v) {
s += v;
}
this.print = function () {
alert(s);
}
}
var x = new Obj();
x.init(0);
x.add(1);
x.print();

for (var i= に限っおいないずいう点は、block scope でないこずから、

test();

function test() {
var i = 10;
{
var i = 20;
alert(i); // 20
}
alert(i); // 20
}

ずなりたすよね。぀たり、
var i;
for (i=
ず考えおも同じではないかず思いたす。


> ずもかくECMA-262の芏栌っおよう分からんずいうのが正盎な感想です。

たしかに。
せめお日本語だずありがたいずころです。(^^;;

--
杉田
sugi...@bk.iij4u.or.jp

Satoshi Nakajima

未読、
2003/12/25 2:07:472003/12/25
To:
杉田さん、みなさんこんにちは。


いろいろ勉匷になりたす。

"T. Sugita" <nws-...@bp.iij4u.or.jp> wrote in message

news:bscgfp$f07$1...@news00.iij4u.or.jp...


>for における var i に限ったこずではなく、
>var i がグロヌバルに珟れるず、global に生成される。
>var i が関数の䞭に珟れるず、その関数内で local scope が生成される。
>(ロヌカルにメモリが確保される)
>block scope ではないので、新たな関数内でなければ、耇数回珟れるず、
>新たに生成(ず開攟)され、スコヌプ範囲は同じ範囲ずなる。

>i を䜿甚する際、ロヌカルスコヌプに無ければ、最倧、グロヌバルたで
>遡っお怜玢する。

珟象から理解する限り :-
「i を䜿甚する際、ロヌカルスコヌプに同じオブゞェクト内関数内で var 文が
明瀺されお無ければ、最倧、グロヌバルたで遡っおvar 文を怜玢する。」

ずいうこずですよね

先日匕甚したりェブサむトの情報「NetscapeNavigatorではvarを䜿い宣蚀した堎合その倉
数は宣蚀された堎所に限らず党おグロヌバル倉数になりたす。」は、これに矛盟するので
す。もしこの情報が正しければ、kounoike さんの曞かれた゜ヌスで、i はすべおグロヌ
バルに扱われるはずですが、NN7.0では、そのように動䜜せず、IEず同様、宣蚀のあった
オブゞェクトの階局でのロヌカル倉数ずしおしか扱われおいないようです。

こういうブラりザやバヌゞョンに䟝存したりするような末端でのお話は、本質的には「本
来の仕様はどうであるか」ずいうこずずは無関係なのですが。たあ、䜿う方にずっおは意
味もないわけではないこずですし。;-p


以䞋は、ie6.0/win98 での動䜜の確認をした時の゜ヌスず結果で、ほんの蛇足です。

//  kounoike さんオリゞナル。28行だけ付け足した。

/*01*/ var x = new Array('0','1','2','3','4','5','6','7','8','9');
/*02*/
/*03*/ fortest();
/*04*/
/*05*/ function fortest() {
/*06*/ function increin() {
/*07*/ do
/*08*/ i++;
/*09*/ while (!(i < 5 || i >= 7))
/*10*/ return i;
/*11*/ }
/*12*/
/*13*/ document.write('------increin()-------' + '<BR>');
/*14*/ for(var i = 2; i < x.length; increin()) {
/*15*/ document.write(x[i] + '<BR>');
/*16*/ }
/*17*/
/*18*/ document.write('------increout()-------' + '<BR>');
/*19*/ for(var i = 2; i < x.length; increout()) {
/*20*/ document.write(x[i] + '<BR>');
/*21*/ }
/*22*/ }
/*23*/
/*24*/ function increout() {
/*25*/ do
/*26*/ i++;
/*27*/ while (!(i < 5 || i >= 7))
/*28*/ document.write('iout='+i+'<br>') // ぀け足した。
/*29*/ return i;
/*30*/ }

/*実行結果(1)
increout() が倉数 i を芋぀けられない。

------increin()-------
2
3
4
7
8
9
------increout()-------
2

*/


// ◎ 02行に「グロヌバルな i 」を導入
/*02*/ var i=1;

/*実行結果(2)
increout()の階局では i が倉化しおいるが、
fortest()内の i は倉化しおいない。
fortest() 内に、ロヌカル倉数 i
のメモリが確保されおいる。

------increin()-------
2
3
4
7
8
9
------increout()-------
2
iout=2
2
iout=3
2
iout=4
2
iout=7
2
iout=8
2
iout=9
2
iout=10
2
iout=11
2
iout=12
2
iout=13
2
iout=14
2
iout=15
2
iout=16
2

無限ルヌプ

*/


// ◎ 14行、19行の倉数宣蚀 var を省略
/*14*/ for( i = 2; i < x.length; increin()) {
/*19*/ for( i = 2; i < x.length; increout()) {

/*実行結果(3)
fortest() 内のロヌカル倉数 i
は確保されず、䞊の階局の i を流甚する。

------increin()-------
2
3
4
7
8
9
------increout()-------
2
iout=3
3
iout=4
4
iout=7
7
iout=8
8
iout=9
9
iout=10

*/


// ◎ 確認
// 02行の省略
/*02*/ //var i=1;

/*実行結果(4) 実行結果(3)ず同じ

実行結果(1)ず比范しおやるず、14行目、19行目で、
「階局内にvar文がないために」䞊の階局の i を流甚する。
䞀番䞊の階局でのみ、var文は省略されおも同じ意味ずなる。

koun...@mbh.nifty.com

未読、
2003/12/25 3:01:182003/12/25
To:
"Satoshi Nakajima" <naka...@chem.gunma-ct.ac.jp> wrote in message
news:bsc07a$e1h$1...@x1wa.gunma-ct.ac.jp...

> kounoike さんの曞かれる関数「increin()」「increout()」ずもに、「return i」
で倉数
> i を返す圢で曞いおおきながら、実行の段階では、「i = 関数」ずせずに、単
に関数
> を実行しおいる点で、仕様倖の曞き方かな、ず感じおしたうずころはありたす。倉
数がグ
> ロヌバルであるこずを期埅しお、関数の実行により倉数を倉化させおおいおそれを
倖から
> 参照しようずしおいるなら、return 文が意味を為さないず思うのです。

ナカゞマさんこんちわ。returnで倀を返す関数を利甚する堎合呌び出し偎でその
倀を利甚しなければならないず蚀うような仕様䞊の制限はないず思いたす。倉数のス
コヌプを調べたかったので初めからreturn 文には䜕の意味も持たせおいたせん
し匕数も䞎えおいたせん。

> kounoike さんはきっずお刀りの䞊で、動かない゜ヌス䟋を挙げられたのでしょう


が、念
> のため、動くはずの゜ヌスも曞いおおきたす。ロヌカル倉数であるこずを匷調
しお、
> k, j を䜿っおいたすが、i で曞いおも動くはずです。
>

関数に匕数枡しでリタヌン倀を利甚するのでは䞊にも曞いたようにスコヌプずは䜕
の関係も無くなるので意図的に普通じゃない䜿い方をしたした。そうでなければ
ナカゞマさんが䞋に曞いたような関数の曞き方が普通の曞き方ですが。たあ匕数に
関しおは倀枡しなので匕数の蚘号が゜k, j, i, だろうが元のiずは䜕の関係もないの
でなんであろうず動くのは自然だず思いたす。

> function increout(j) {
> do
> j++;
> while (!(j < 5 || j >= 7))
> return j;
> }

--
******************************
keizi kounoike
******************************

ku...@gssm.otsuka.tsukuba.ac.jp

未読、
2003/12/25 2:49:372003/12/25
To:
久野です。

naka...@chem.gunma-ct.ac.jpさん:
> 先日匕甚したりェブサむトの情報「NetscapeNavigatorではvarを䜿い
> 宣蚀した堎合その倉数は宣蚀された堎所に限らず党おグロヌバル倉数
> になりたす。」は、これに矛盟するのです。もしこの情報が正しけれ
> ば、

なんすか、その倧嘘サむトは? 次のHTMLをNetscape Navigator
4.78/Unix で実行しおみたしたがもちろん「10」が2回衚瀺されたすよ。
だいたいNetscape Navigatorに搭茉されおいるJavaScript 1.11.2あ
たりを土台にECMA-262が䜜られたんだからこんな根幹郚分が違うわけは
ないです。

倧嘘サむトは沢山あるけどそんなモロなのは珍しい。 久野

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
var x = 10;
function f1() { var x = 20; }
document.writeln(x);
f1();
document.writeln(x);
</script></pre>
</body></html>

Satoshi Nakajima

未読、
2003/12/25 9:59:072003/12/25
To:
kounoike さん、こんばんは

<koun...@mbh.nifty.com> wrote in message news:bse5p2$8ug$1...@news511.nifty.com...

> ナカゞマさんこんちわ。returnで倀を返す関数を利甚する堎合呌び出し偎でその
> 倀を利甚しなければならないず蚀うような仕様䞊の制限はないず思いたす。倉数のス
> コヌプを調べたかったので初めからreturn 文には䜕の意味も持たせおいたせん
> し匕数も䞎えおいたせん。

:


仰有る通りだず思いたす。ちょっず読み返しおみたら、僕の投皿の曞き方はちょっず決め
぀けっぜいですね。倧倉倱瀌したした。 m(__)m
自分でもいろいろ詊したり、kounoike さんをはじめ、みなさんの蚘事を読んだりしなが
ら、非垞に勉匷になっおいたす。今埌ずもよろしくお願いしたす。

T. Sugita

未読、
2003/12/28 6:30:402003/12/28
To:
すぎたです。

In message news:bse4qh$n...@utogw.gssm.otsuka.tsukuba.ac.jp
<ku...@gssm.otsuka.tsukuba.ac.jp> wrote ...

> なんすか、その倧嘘サむトは? 次のHTMLをNetscape Navigator
> 4.78/Unix で実行しおみたしたがもちろん「10」が2回衚瀺されたすよ。

もしかしたら、倧ヌヌヌ昔、そんな仕様のものがあったのだろうか
ずも考えおいたのですが、考えおみるず Copyright (C) 2000-2001
なので、そんなに叀い話でもないずいうこずに気づきたした。

NN2 を入れるのはちょっず怖いので、NN3 の資料をみるず、

Copyright (C) 1995-1996 Netscape Communications Corporation
http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/ident.htm#1004248

| When you set a variable identifier by assignment outside of a function,
| it is called a global variable, because it is available everywhere
| in the current document. When you declare a variable within a function,
| it is called a local variable, because it is available only within the
| function. Using var is optional, but you need to use it if you want to
| declare a local variable inside a function that has already been declared
| as a global variable.

ずありたすので、NN3 でも 10 が 2 回衚瀺されそうです。

--
杉田
sugi...@bk.iij4u.or.jp

新着メヌル 0 ä»¶