「function 関数()」の()内が空の時は、どう解釈す

Writer: admin Type: 友人関係の悩み Date: 2018-12-14 00:00
「function 関数()」の()内が空の時は、どう解釈すればいいのでしょうか?JacaScriptのfunctionの書き方を勉強中です。例えばfunction sliderSlide(val){なんちゃらかんちゃら}みたいに、()にちゃんと値が入っているときはわかるんですが。function draw() { ctx.beginPath(); ctx.arc(x, y, 10, 0, Math.PI*2); ctx.fillStyle = "#0095DD"; ctx.fill(); ctx.closePath();}みたいに、()内に何も書いてないやつってありますよね?なんで、何も書いてないのか、どういう時に書かなくてよいのかがわかりません。少し解説お願いできますでしょうか。共感した0###()の中身を引数と言いますが、関数の設計上、必要なら書けばいいし、不要なら書かなければいいだけです。例えば、提示されたdraw関数ではctxという変数を参照しています。関数内で宣言された変数ではないので、draw関数の外側、例えばグローバル変数などで宣言されたctx変数を参照しています。これをもし、draw関数が引数としてcontextを受け取るように改造するなら、--------------------function draw (ctx) {  // 中身は同じ}// canvas変数はcanvas要素を参照するものとするconst context = canvas.getContext('2d')draw(context)--------------------こう書くこともできます。どちらが正解ということではなく、言語仕様上はどちらでも構いません。例えば複数のcontextに対応する汎用的な関数を作るなら、引数として受け取るようにしたほうが良いでしょう。--------------------const context1 = canvas1.getContext('2d')draw(context1)const context2 = canvas2.getContext('2d')draw(context2)--------------------こんなイメージです。1つの関数で2つのcanvasに対応しています。ナイス0
###なるほど!今までモヤモヤしていたものが晴れました###構造化型言語の関数の機能の一つに、関数の内外で変数を共有しないというものがあります。たとえば、呼び出し元のmain関数の中で、int iを定義して居たとして呼出し先の関数の中でiという変数を使ったとしても、それはmainにあるiとは別の変数であり、別の値を持つのです。そうする事で、関数の外側の余計な影響を受けることも無く、関数の内部では関数の中の事だけを考えれば良くなります。こうして関数単位で、独立性を高めることで、その関数を使い回しやすくなります。しかし、関数の内外でデータのやり取りをしたいこともあります。そのうち、呼び出し元から関数へのデータ受け渡しに用いられるのが()の中にある引数です。逆に関数から、呼び出し元へデータを返す時に使うのが、返り値です。その関数がどのような引数を必要としているかは、関数の定義により決まっています。引数の有無や数や配置を、決めるのは関数を作った側の人です。 なので、どういう時に書かなくて良いのか?というより、引数を持たない関数を呼ぶ時には書かない。と考えてください。(オーバーロードとかで使う側が引数の構成を選べる場合も在るのですが、それはまた別の話で)自分が関数を作る側の場合には、その関数が動作するに当たって指定して欲しい情報を、引数に持たせます。ナイス0

 

TAG