• ベストアンサー

関数の引数って。。

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

noname#12205
noname#12205

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

  • ベストアンサー
回答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

  • 関数の引数と型

    関数の引数と型 TextBoxに数字しか入力できないようにする関数として Private Function fTextBoxNumberCheck(Byval MyTextBox as TextBoX)As Boolean という宣言文を目にしました。 Q1. Byval MyTextBox これは関数の呼び出し側では実引数としてText1,Text2のようなオブジェクト自体を 渡すことができるということでしょうか? 私の読んでいる入門書では実引数は変数ばかりなので・・・。 Q2. as TextBox これは入門書によれば実引数のデータ型となっていますが 調べてもTextBoxという型はありませんでした。 宣言文は関数のサンプルとして、その前後は記載されていませんでしたが、 どこかにTextBoxの宣言をしてあるはず(?)なのでしょうか? Yesとすればどのように書くのでしょうか?

  • 関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。

    関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。 function hoge(m, l, p, h) {} (中身は省略しています。) この関数の引数「h」にhtmlを代入しようとしています。 そのhtmlには、WindowOpen()があり、そのまま代入すると「")"がありません」 エラーが発生するのですが、これは無茶なことなのでしょうか。 なんとか解決方法があれば教えていただけませんでしょうか。 「"」の時のように「\"」ではだめだったので行き詰っています。

  • 引数のある関数と引数のない関数の設定

     お世話になっております。 PHPのプログラミングで関数をつくる際に、引数を渡す関数と引数がない関数がありますが、すでに定義済みの関数のように、引数がある場合と引数がない場合の両方を取り扱うにはどうしたらよいでしょうか? function example ($a) { if ($a == 0 || $a == '') { print '引数なし'; } else { print $a; } } のような関数で、 example(); という感じで引数を入れないと、 Warning: Missing argument … というエラーがでてしまいます。関数を example(''); と呼び出すと大丈夫なのですが。。。 プログラマーにとって基本的なことだと思うのですが、調べてもなかなか出てこないので質問させて頂きました。どなたかわかる方がいたらしたらおしえてください。 よろしくお願いします! }

    • ベストアンサー
    • PHP
  • fortran90 引数で渡された関数の呼び出し

    fortran90を始めて間もない者です。 メインプログラムより呼び出しているサブルーチンにユーザ関数を渡しています。 このサブルーチンを自前で作成するのが目的です。 引数で受け取った関数を、自前の別関数より呼び出すにはどうしたら良いでしょうか。 Cであれば関数のポインタをグローバルな変数にセットしてやれば可能だと思いますが・・・ !-------------------------------- subroutine sub(func1, a) real::a interface real function func1(x) real::x end function func1 real function func2(x) real x end function func2 end interface call sub2(func2, a) write(*,*) a return end subroutine sub !-------------------------------- real function func2(x) real::func2, x ! ここでfunc1を呼び出したい ! func2=func1(x) end function func2 !-------------------------------- subroutine sub2(funca, a) real::a interface real function funca(x) real::x end function funca end interface a=funca(10.) return end !-------------------------------- program main external func real a call sub(func, a) write(*,*) a end program !-------------------------------- function func(x) real func, x func=2.*x*x end function func

  • 効率良くイベントに引数を渡すやり方

    sample2に引数「x」「y」を渡したいが為に 次のように何段階も同じような作業をしなくてはならない方法しか 自分は思いつかないのですが、何かもっと効率的な方法はあるのでしょうか? function main() { var element = document.createElement('div'); element.x = x; element.y = y; element.onclick = function(){ sample1(this.x, this.y); }; } function sample1(x, y) { var element = document.createElement('span'); element.x = x; element.y = y; element.onclick = function(){ sample2(this.x, this.y); }; } function sample2(x, y) { alert("x="x+" y="+y); }

  • 関数の引数とグローバル変数について

    javascript初心者です。 どうしても分からないことがあるので質問させて頂きます。 グローバル変数の値を関数で処理して増やしコンソールログに表示していく、 というようなソースがあるとします。(以下) //グローバル変数 var a = 0; var b = 0; var c = 0; //計算する関数 var afunc = function(){   a++;   console.log(a); } var bfunc = function(){   b++;   console.log(b); } var cfunc = function(){   c++;   console.log(c); //onclickなどで呼び出す関数 function test1(){   var aplus = new afunc(); } function test2(){   var aplus = new bfunc(); } function test3(){   var aplus = new cfunc(); } グローバル変数や関数などが3つと数が少ないならこれでもいいかも知れませんが、 これが数十個とかに増えると、ソースの量もかなり多くなり 管理も大変になると思い簡略化させたいと考えました。 そこで以下のように変えてみたのですが、 加算がうまくいきません。 //グローバル変数 var a = 0; var b = 0; var c = 0; //計算する関数 vvar xxfunc = function(xx){   this.xx = xx;   this.show = function() {     this.xx++;     console.log(this.xx);   } } //onclickなどで呼び出す関数 function test1(){   var aplus = new xxfunc(a);   aplus.show(); } function test2(){   var aplus = new xxfunc(b);   aplus.show(); } function test3(){   var aplus = new xxfunc(c);   aplus.show(); } もしかすると、関数の引数にはグローバル変数を指定することができないのでしょうか? 何かうまいやり方はあるでしょうか? プログラミング自体が勉強し始めたばかりなので、 おかしなソースの書き方をしているかもしれませんのが、 ご教授、よろしくお願いいたします。

  • VBAの関数で引数渡しでエラー

    関数呼び出しでObject型を渡したいのですが「引数の型が一致していません」との エラーになってしまいます。 以下のプログラムをどのように修正すればよいのでしょうか? Sub Test() Dim obj As Object Set obj = CreateObject("Scripting.Dictionary")     :   Sample(obj) End Sub Function Sample(obj As Object) End Function

  • Javascriptの関数について

    Internet Explorer の右クリックメニューに登録するスクリプトを作っています。 たとえば、いま表示しているページのURLを表示する場合、 <script type="text/javascript"> var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = function() {   kansuu(URL); }; kansuu = function(url) {   alert(url); } </script> ↑は動きます。 また、 var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = kansuu(URL); function kansuu(url) {   alert(url); } ↑も動きます。 ところが、 var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = kansuu(URL); kansuu = function(url) {   alert(url); } は動きません。 なぜでしょうか? 理由を教えていただけると嬉しいです。 よろしくお願いします。

  • 関数の引数と実引数の取り扱いについて

    C言語初心者です. 関数の引数と実引数の取り扱いについて,教えていただきたいことがあります. 例えば,2変数の和を求める関数を考えると,以下のようになると思います. #include <stdio.h> double sum(double x, double y); int main(void) { double a, b, wa; a=2.0; b=3.0; wa=sum(a,b); return 0; } double sum(double x, double y) { double total; total=x+y; return total; } このとき,mainプログラムでは,a,bふたつの変数を定義しておいて,関数sumに入れて計算させているわけですが,mainプログラムで変数x,yを定義しておいて,以下のようなプログラムにするのはありでしょうか? 参考書などをみると,前者のように取り扱っているようなのですが,試しに後者で実行させてみても同じ結果となりました. #include <stdio.h> double sum(double x, double y); int main(void) { double a, b, wa; a=2.0; b=3.0; wa=sum(a,b); return 0; } double sum(double x, double y) { double total; total=x+y; return total; }

  • 引数付きでイベントをセットしたい

    下のようにして引数を付けてイベントをセットしようとしたのですが、 どうも動作がうまくいってないようなのです。引数なし>Obj.onclick = check; ならちゃんと動作しました。どうすれば引数付きでセットできるのでしょうか? function check(text) { alert(text); } function sample() Obj = document.getElementById("sample"); Obj.onclick = check("メッセージ");

専門家に質問してみよう