• ベストアンサー

関数の引数って。。

引数ってその関数の中だけに作用するもので、 そもそも変数とは違うものですよね? ////sample/////////// insuu = 100; function kansuu(insuu){ x = insuu; } kansuu(200); document.write(x); ////////////////////// のようにしたら、200と表示されて、エラーも出なかったわけですが、 引数と変数って無関係ってことですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

引数と変数は関係はありますが、 その変数がどこで有効でというのがポイントで その有効範囲によりグローバル変数,ローカル変数と呼びます。 引数とは関数に渡す値の事で、ひきすうと読みます。 で function kansuu(insuu){ の insuu は引数を格納するローカル変数です。 一部のアドレス渡しの言語を除き、JavaScript の様な値渡しの言語は関数が呼ばれた時にその変数に値が代入され、 その関数から制御が離れた時に変数自体が解放されたと思います。 順次診て行くと、 >insuu = 100; insuu は明示的に定義されていないので、代入先としてグローバル変数を暗に数値として確保される。 >function kansuu(insuu){ kansuu という関数で引数は1つ以下という定義がされている。 引数は insuu というローカル変数に代入すると明示的に定義されています。 実際、引数がなくても2つ以上あっても、また数値であろうが文字であろうが 関数の呼び出しとしてはなにも問題はない・・・。 ただ、引数を使う時にその処理内容によっていろいろ配慮が必要になりますがぁ・・・。 >x = insuu; insuu という変数の内容を評価する。まずローカル変数でその存在をさがし、ない場合に限りグローバル変数にその存在を探す。 もしローカル変数が存在しながらグローバル変数を扱いたい場合は、window.self.insuu と明示的に指定する事で扱えます。 (windowsXP SP2 でのIE6. Opera7.54u2, Mozilla1.7.5 でのみ確認。) 代入先の x もまずローカル変数で存在を探し次にグローバル変数で存在を探します。そしていずれでも該当変数がない場合にグローバル変数として暗に定義され値が代入されます。 >kansuu(200); 関数 kansuu を呼び、引数として数値200 を渡します。 尚、引数として変数を記述した場合は、関数を呼び出した時にその変数が評価されその評価内容が値として渡されます。 >document.write(x); 変数 x を書き出します。x を明示的にグローバル変数と定義している処はありませんが 関数の中で変数の定義なしに受けてとして記述される事により暗にグローバル変数として確保されているので、 適切に処理されています。 以上となりますが、 思うに、たぶん変数という言葉の意味からして ちょっと・・・・。

noname#12205
質問者

お礼

詳しくありがとうございます 勉強になりました ひきすう。だったんだ。w

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>引数ってその関数の中だけに作用するもので、 >そもそも変数とは違うものですよね? それは、そうですが、 xを関数の中で var x; の様に定義しないで使っているので、 関数の外で定義されたものとして扱われてしまいます。 ために、関数の中だけということにならなくなってしまっています。 関数の中だけで使う変数は var x=insuu; のように使ってください。

noname#12205
質問者

お礼

ありがとうございます ためになりました

関連するQ&A