• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(hoge)("fuge"); はどういう意味を持つのでしょうか?)

(hoge)("fuge") はどういう意味を持つのでしょうか?

Wernerの回答

  • Werner
  • ベストアンサー率53% (395/735)
回答No.7

ポインタも参照も、「オブジェクトを指し示すもの」という意味では同じです。 違いは(C言語のポインタとの比較で)、ポインタはポインタ演算が出来るとか、 一般的には参照の方が安全とされているとかそんなところかな。 参照の概念が理解できるなら、とりあえず同じものと思っていても 当面大きな問題はないと思います。 実際、ポインタは(JavaScriptのではなくもっと広義の)参照の一種といえなくもないので。 > 「関数ポインタはJavaScriptでは使わない」ということでした。(#2) 少なくともポインタという用語をJavaScriptでは普通使いませんし、 また使わなくてもJavaScriptの説明はできます。 「忘れた方が良い」と言ったのは、 C言語のポインタを知っているならまだしも 知らない人にわざわざポインタという用語を持ち出すのは 混乱させるだけでJavaScriptの理解の妨げになりそうだと思ったからです。 今回の匿名関数(無名関数)の話も、 関数ポインタが代入されているといるのではなく 関数オブジェクトが代入されていると考えた方が JavaScriptを理解する上では良いと思います。 (というか、実際その通りなので。) JavaScriptにおいては、関数がオブジェクトの一種だから、 関数を変数に代入することが自由に出来るわけです。 そして、JavaScriptのオブジェクトは関数オブジェクトも含め全て参照型で、 オブジェクトが代入されているというのは オブジェクトへの参照が代入されていることと同じです。 まあ匿名関数の話だけなら、 参照型と基本型の違いはあまり意識しなくても良さそうなので、 その辺のことは後々理解できればよいと思います。 余談。関数はオブジェクトなのでプロパティを持てます。 ------ var hoge = function(str){ alert(str); }; hoge.fuga = "hello"; //関数オブジェクトhogeのfugaプロパティに代入 alert(hoge.fuga); ------

think49
質問者

お礼

アドバイスありがとうございます。 お礼が遅れまして、申し訳ありません。 > 参照の概念が理解できるなら、とりあえず同じものと思っていても当面大きな問題はないと思います。 > 実際、ポインタは(JavaScriptのではなくもっと広義の)参照の一種といえなくもないので。 なるほど。 とりあえず、「ポインタは参照の一種」という認識でいようと思います。 > 関数オブジェクトが代入されていると考えた方がJavaScriptを理解する上では良いと思います。 「関数オブジェクトが代入されている」という考え方でいいのですね。 いろんな考え方があって勉強になります。 > 余談。関数はオブジェクトなのでプロパティを持てます。 過去、別の質問でWernerさんに回答していただいたのを覚えています。 その節はお世話になりました。m(_ _)m

関連するQ&A

  • 関数を呼び出すHTMLタグ<body onload="hoge()">について

    ほぼ独学でJavaScriptを学んでいるので、一般的なコード(HTML含め)の書き方が分かりません。 JavaScriptでは、ボタンや画像をクリックすると動作する、 というものが多いですが、そうではなくて、 (それはonclick等で関数を呼び出せば良いことは分かります) 時計のように、アクセスした瞬間から実行されるプログラムを複数書きたい時は、 どのようにするのが妥当でしょうか。 <body onload="hoge()">では、関数hoge()しか実行されないことになりますよね。 そうではなくて、hoge()以外にもいくつかの関数を実行したい時はどうするのが一般的ですか? ここでC言語のように、hoge()をmain関数(int main(void){})のような扱い方にすると、 hoge()関数内で呼び出されている関数も呼び出されることになりますが、そのような書き方で良いですか? アクセスの効率の良さから考えて、他に良いやり方はあるでしょうか。 ・・・前に困ったので<body>タグを2つ付けて2つの関数をonloadアトリビュートで呼び出すという、 奇々怪々なことをやってみて、それでIE7,FireFox3で動いていたので驚いたんですが、 そんなやり方はさすがに御法度ですよね(笑)。 答えにくい質問だと思いますが、アドバイスお願いします。

  • if (typeof hoge == 'funct

    ・下記コードで、「if (typeof hoge == 'function') {」は何をしているのでしょうか? ・なぜこの条件が必要なのでしょうか? ・なくても良い? //初期化関数 function init() {   if (typeof hoge == 'function') {     hoge();   }

  • PHPにおいての関数ポインタ(リファレンス)の実装の仕方

    こんにちわ, 今PHP4.3.4を使用してWebを作成しています。 C言語で言う関数ポインタを実装したいのですが,どうすればいいのでしょうか。 たとえば, function hoge(){ return 5; } function hoge2(){ return 4; } function hoge3(){ return 3; } と宣言して function main($a, $b)[ return ($a + $b); } としたときに, main(hoge(), hoge2()); をしたときに9 main(hoge()2, hoge3()); をしたときに7 とするようにmainの関数をつくりたいのですが,どうすればいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • -(ハイフン)_(アンダーバー)の先頭や末尾での使用不可にする正規表現の書き方

    JavaScriptの(正確にはJavaScriptのみというわけでは無く、どの言語にもいえることなのですが、)正規表現を使って、以下のような書き方を不許可にしたいのですが、なかなかうまくいきません。 絶対条件は、英数字のみです。 禁止にしたい:-hoge、hoge-、_hoge、hoge_ しかし、これはOK:ho-ge、ho_geなどなど........ ようするに、先頭末尾に-(ハイフン)_(アンダーバー)の使用を禁止にしたいのです。 但し以下の場合に使わなければなりません。 function check( str ) { if( str.match(/ここに制御文/) ) return false; else return true; } ↑ みたいな関数があって、下記のような処理をほどこしています。 if( !check( str ) ){ alert( strMsg ); return false; } わかりづらい内容かもしてませんが、 どなたご教授いただけば幸いです。 宜しくお願いいたします。

  • イベントリスナに登録される function(e){} の "e" はeventオブジェクト?

    私はイベントリスナ登録時の匿名関数に渡す引数eの意味が今まで理解できていませんでした。 最近、下記コードを実行することで、 <script type='text/javascript'> window.addEventListener ('click', function(e){ console.info(e); // 引数をコンソール表示 (要Firebug) for (p in e){ console.info(p + ' = ' + e[p]); // プロパティを列挙 } }, false); </script> 「eventオブジェクトを渡しているらしい」と朧気ながら理解できました。 ただ、疑問点も残ります。 私の理解では、匿名関数は (function(str){ alert(str); })('Hello'); のように明示的に引数を渡さなければ、引き渡された値は undefined となるはずでした。 変数eの値はどこから出現したのでしょうか? そもそも、変数eはeventオブジェクトなのでしょうか?

  • クラスを定義したいのですが下記は同じ意味でしょうか

    JavaScriptで、クラス(のようなもの)を定義したいのですが、 下記は同じ意味でしょうか? ・var Hoge = function() {}; ・function Hoge() {}; 上は、Hogeクラスを定義したことになるのでしょうか? それとも単に無名クラス(?)を、変数へ格納しただけ?

  • Qtの文字列変換について

    初めて質問させて頂きます。 現在下記の環境にて開発をしております。 OS:Windows7 言語:C++(VS2005) Qt:4.7.3 下記のコードを試すと、違う結果となってしまっております。 私には、なぜ違う結果となるかわかりません。 C++の基本的な動作の話でしたら申し訳ありませんが、是非ご教授下さい。 ----- QVariantMap test; test.insert( "STR_TEST", "abcde" ); QByteArray hogehoge = test.value("STR_TEST").toString().toLocal8Bit(); char* hoge1 = hogehoge.data(); char* hoge2 = (test.value("STR_TEST").toString().toLocal8Bit()).data(); ----- これでhoge1とhoge2の内容が違ってしまいます。 hoge1は"abcde"がとれています。 hoge2は失敗しているようで、初期値のままのようです。 なにか変換の手順等の問題があるのでしょうか? 宜しくお願いいたします。

  • javascript php 連携

    よろしくお願いします。 javascriptの『onchange』値をPHPの変数に入れたいと苦戦しています。 <html> <head> <script type="text/javascript"> function hoge1(){ var x = $('str1').options[$('str1').selectedIndex].text; やりたいことはここでPHPの変数『list_a』にjavascriptの変数『x』の値を入れたいです。 } </script> </head> <body> ここに結果表示 <?= $list_a; ?> <select id="str1" name="str1" onchange="hoge1()"> <option>hoge1</option> <option>hoge2</option> <option>hoge3</option> </select> </body> </html> よろしくお願いいたします。 ちなみにAjaxは全くわかりませんのですいません。。。

    • ベストアンサー
    • PHP
  • PHP コードを文字列として出力する方法

    お世話になります ダブルクォーテーションで囲っても 「PHP コード」を「文字列」として出力する方法 つまり、evalの逆の関数のようなものはありますでしょうか $a['huga'] = 2; $b['hoge'] = 3; //式 $c = $a['huga'] * $b['hoge'] ; abc($c = $a['huga'] * $b['hoge'] ); function abc($str){ //ここでなんちゃらほんちゃら //もしくはfunctionの外側でなんちゃらもでも可 echo $str; } 期待する出力結果 $c = $a['huga'] * $b['hoge'] ; 実際の結果 6 $の前に¥を入れてダブルクォーテーションで囲めば、 または、シングルクォーテーションの前に¥を入れてシングルクォーテーションで囲めば 文字列になるのはわかりますが 式の文字列には直接、手を加えず関数等で実現するやり方が知りたいです ※連想配列のキーの囲み文字はシングルクォーテーションです、ダブルに出来ない条件でお願いします。 お忙しい中恐縮ですが熟練者の方でわかる方がいましたら お教え下さいませ

    • ベストアンサー
    • PHP
  • 文字列strの中から文字cを探すプログラム(C言語)がわからない

    文字列strの中から文字cを探すプログラム(C言語)がわからない 柴田望洋さんの「[新版]明解C言語」という本の演習11-2なんですがどうしてもわかりません。間違いは無いと思うのにコンパイルすると警告を吐かれます。 僕が書いたプログラムを載せます。 /* 文字列strの中に、文字cが含まれていれば(複数ある場合は、最も先頭側とする)、 その文字へのポインタを返し、含まれていなければNULLを返す関数 char *str_chr(const char *str, int c) {} を作成せよ。 */ #include<stdio.h> char *str_chr(const char *str, int c){ while(*str){ if(*str==c) return str; str++; }     return NULL; } int main(){ char *str; char c; scanf("%s",str); scanf(" %c",c);     printf("%d",str_chr(str,c)); return 0; } コンパイラは「関数str_chrのif分の中のreturn strの型変換に問題がある」と言っているんです。 型変換はしるつもりは無いのにコンパイラはなぜそのように認識するのでしょうか。 またネット答えを探しましたがどうやらこのreturn strの部分はreturn (char*)strが正解のようです。意味がわかりません。strはポインタなのになぜまたわざわざchar型に変換しているのですか?といか(char*)の意味が根本的にわかりません。 質問ばかりですみません。初心者でポインタがどうにも理解できないんです。 誰か詳しい人教えてください。 お願いします。