function myfunc(){}
関数宣言: 関数は標準構文を使用して宣言されます
function functionName(params[]) {
//functionbody
}
この構文を使用すると、スコープ実行の開始時に関数が宣言されるため、スコープ内 (および子孫スコープ内) のどこでも使用できます。
var s = myfunc(); //s == 0
function myfunc() {return 0;}
var myfunc = function() {};
これは、関数式として知られるパターンを使用し、無名関数の参照を という名前の変数に割り当てるだけmyfunc
です。この構文を使用すると、変数が解析されるまで関数を使用できません。変数がスコープの先頭に引き上げられたとしても、インタープリターが変数を解析するときに変数が初期化されるため、上記の例は機能しません。
var s = myfunc(); //ReferenceError: myfunc is not defined
var myfunc = function() {return 0;};
ただし、以下の例は次のようになります。
var myfunc = function() {return 0;};
var s = myfunc(); //s == 0
3 番目の例は、関数式で行った方法でオブジェクト プロパティ (オブジェクト メソッドとも呼ばれます) に無名関数を割り当てているだけなので、上記のパターンを使用すると、コードは次のようになります。
var onOpen = function() {},
onClose = function() {},
SqueezeBox = {//curly braces denotes an object literal
presets: {//again, this is a nested object literal
onOpen: onOpen,
onClose: onClose
}
};
これはあなたの例とまったく同じように動作しますが、ここでは変数を使用して匿名関数への参照を取得してからオブジェクトに渡すという唯一の違いがあります。オブジェクトについてもっと知る必要がある場合は、MDN docsを読むことをお勧めします。とにかく、JS の仕組みに本当に興味があるなら、JS に関する非常に優れた記事であるJavascript Gardenをお勧めします。