1
 var funcHi = function() { 
    var a=6;
    var b=5;
    return a+b;
    };

var withBrace = funcHi();
var withoutBrace = funcHi;

console.log("With braces: "+withBrace)     //'Reference 1'
console.log("Without braces: "+withoutBrace)          //'Reference 2'
console.log("Without braces: "+withoutBrace())         //'Reference 3'

コードは非常にシンプルで明確です。「参照 1」と「参照 3」の場合、コンソールには 11 が表示されますが、「参照 2」をどこで使用すればよいかわかりません。「参照 2」の場合、コンソールは 11 を表示する代わりに完全な関数を表示するだけです。多くの場合、「参照 2」を使用します (例: window.onload = initAll) が、どのように役立ちますか。

window.onload = initAll;  //What does it actually do? Why not 'window.onload = initAll()'

その背後にあるコンセプトについては明確ではありません。可能であれば、誰かがこのことに関する良い教訓へのリンクを教えてくれませんか?

4

3 に答える 3

1

ケース1

var withBrace = funcHi();

この場合、withBraceの結果になりfuncHiます。だということだ:

console.log(withBrace);
// 11

ケース 2

var withoutBrace = funcHi;

この場合、withoutBraceは function への参照ですfuncHi。だということだ:

console.log(withoutBrace);
// function () { var a=6; var b=5; return a+b; }

したがって、それを呼び出すことができます:

console.log(withoutBrace());
// 11

window.onload = f;

のようなものを書くと、それはイベントであり、 のイベントが発生するたびwindow.onload = f;に関数fが実行されます。したがって、関数は注文なしで自動的に起動 します。ブラウザが決定するたびに起動します (この場合は完全に読み込まれたとき)。onloadwindowf

これは、次の関数を作成する必要があることを意味しますonload

window.onload = function () {
    // do something
};

ただし、この機能を自分で実行することはありません。

于 2013-05-19T04:39:54.863 に答える
1

最初のケースでは:withBraceを呼び出した結果が含まれているためfuncHi11

2 番目のケースでは:withoutBrace関数を参照しますfuncHi。したがって、は関数であり、 と同じ関数であるwithoutBrace === funcHiと言えます。doと getを介して関数を呼び出すことができます。これは 3 番目のケースです。withoutBracefuncHifuncHiwithoutBracewithoutBrace()11

var funcHi = function() { 
  var a=6;
  var b=5;
  return a+b;
};

//assigning the result of calling funcHi to withBrace
var withBrace = funcHi(); 

typeof funcHi;    //function
typeof withBrace; //number
withBrace === 11  //true, withBrace is 11, a result of calling funcHi

//assigning funcHi to withoutBrace
var withoutBrace = funcHi; 

typeof funcHi;           //function
typeof withoutBrace;     //function
withoutBrace === funcHi; //true, they are the same function

funcHi();       //11
withoutBrace(); //11, they return the same thing since withoutBrace points to funcHi
于 2013-05-19T04:27:14.357 に答える
0

funcHi関数自体への参照です。

関数を渡したい場合 (たとえば、イベントへのハンドラーとして追加する場合) は、そのように行います。

関数を呼び出してその結果を取得する場合にのみ、括弧を追加します。

于 2013-05-19T04:27:20.590 に答える