2

次の機能があります

  var hideAll = function() {
    // code  
    return ///...  
  };  

そして、私は別の関数でコールバックのようにこの関数を使用しています。
私がそれを次のように使用しているとき

function (params, hideAll) {}  

すべてうまく機能していますが、私が使用しているとき

function (params, hideAll() ) {}    

すべてうまく機能していません!

だから私の質問は、関数の実行hideAllとの違いは何ですか?hideAll()

4

4 に答える 4

3

hideAll-これは関数への参照です
hideAll()-これは関数の実行であり、その結果です

function (params, hideAll) {}は正しい関数定義ですが、そうでは
ありfunction (params, hideAll() ) {}ません-関数定義で別の関数を呼び出すことはできません。

ただし、次の有効なコードを記述できます。

  var hideAll = function() {
    // code  
    return ///...  
  };  

  var functionWithCallback = function(callback){
      callback();
  }
  var closureReferringHideAll = function(){
      hideAll();
  }

  // The following two lines will do exactly the same in current context,
  // i.e. execute hideAll.
  functionWithCallback(hideAll);
  closureReferringHideAll();
于 2012-07-27T07:19:10.843 に答える
0

hiddenAll()は関数ではなく、実行関数の結果です。

function hideAll(){
    return 0;
}

hiddenAll() -数値0

hiddenAll-関数

于 2012-07-27T07:20:04.200 に答える
0

少し前に戻って、foo 最初に次のようなメソッドを呼び出すと仮定します。

foo(params, hideAll() ) {}

これは、hideAllの戻り値を値として使用します

一方

foo(params, hideAll) {}

値としてhideAll関数自体を使用します

ただし、実際に実行しようとしたのは、次のような関数を宣言することです。

function (params, hideAll() ) {}

それは意味がありません。パラメータリストのパラメータとは異なるもので関数を宣言することはできません。

したがって、どちらの形式も関数の呼び出しには有効ですが(それでもまったく異なる意味です)、後者は関数の宣言には有効ではありません

于 2012-07-27T07:23:59.577 に答える
0

Javascriptや他の多くの言語では、関数は「ファーストクラスオブジェクト」です。つまり、関数を呼び出したり実行したりできますが、変数や配列に関数を格納したり、関数を別の関数に渡したりすることもできます。

関数を呼び出した結果の値を渡すことについて話しているのではなく、関数自体について話していることに注意してください。検討:

function test10(f) {
    for (var i=0; i<10; i++)
        alert(f(i));
}

function square(x) { return x*x*; }
function cube(x) { return x*x*x; }

test10(square);
test10(cube);

square最後の2行は、関数(およびcube)をパラメーターとして関数に渡していますtest10

この()構文は、呼び出しを行うことをJavascriptに通知し、関数名だけでなく、変数や配列要素などの任意の式で使用できます...例:

var f_arr = [square, cube];
for (var i=0; i<2; i++)
  alert(f_arr[i](i+42));  // Will call square(42) and cube(43)

実際、Javascriptではコード

function square(x) {
  return x * x;
}

同一ではありませんが、

square = function(x) {
    return x * x;
};

したがって、関数の定義は実際に変数の割り当てに近いです

于 2012-07-27T07:42:54.917 に答える