次の形式の関数定義の違いは何ですか:
$.myFunction = function() {
//function body
};
var myFunction = function() {
//function body
};
$(myFunction = function() {
//function body
});
次の形式の関数定義の違いは何ですか:
$.myFunction = function() {
//function body
};
var myFunction = function() {
//function body
};
$(myFunction = function() {
//function body
});
最初に、内部で使用するjQuery、mooTools、Prototypeなどの JavaScript ライブラリのいずれかである関数myFunction
を追加します。$
$
最初の関数では、独自の関数を で指定された JavaScript ライブラリに追加するだけです$
。
2 つ目は、次の形式を持つ関数宣言とは対照的な関数式です。
function myFunction() {
//function body
}
3番目のものは奇妙に見えますが、JavaScriptライブラリのコンテキストで使用される関数式$
でもあります.
関数式と関数宣言の違いについて詳しく知りたい場合は、次の優れた投稿をご覧ください。
覚えておくべき関数式と関数宣言の最も重要な違いは、宣言された場所に関係なく関数宣言が全体で利用できることです (それらは一番上に持ち上げられているため) が、関数式は以前またはどこかで定義されている場合にのみ実行できます。あなたの後のコードのために。例は次のとおりです。
foo1(); // alerts "I am function declaration"
foo2(); // error, undefined function
function foo1() {
alert('I am function declaration');
}
var foo2 = function() {
alert('I am function expression');
};
foo1(); // alerts "I am function declaration"
foo2(); // alerts "I am function expression"
参考までに、自己呼び出しの無名関数と自己 inovking の名前付き関数もあります。
// self invoking anonymous function
(function(){
// code
})();
// self invoking named function
(function foo(){
// code
})();
そして、これらの文字を使用して関数式に変換された関数宣言:
! function(){
// code
})();
+ function foo(){
// code
})();
()
署名の最後にあるため、自己呼び出し関数は解析されるとすぐに実行されることに注意してください。
$.myFunction = function() {
//function body
};
これにより、関数がオブジェクトのプロパティとして作成され$
ます。jQuery を使用している場合$
は、グローバルjQuery
オブジェクトです。この関数を次のように呼び出します。$.myFunction()
var myFunction = function() {
//function body
};
これにより、 という変数に割り当てられた関数が作成されますmyFunction
。これを別の関数内で行うmyFunction
と、そのスコープでのみ使用可能になります。
$(myFunction = function() {
//function body
});
これは 2 つのことを行っています。わかりやすくするために、2 つのステップに分けて説明します。
myFunction = function() { // step 1
//function body
};
$(myFunction); // step 2
myFunction
です。var
キーワードを使用しなかったため、変数はグローバルです。一般に、おそらくグローバル変数を使用したくないでしょうし、その定義があまり明白でない場合は確かにそうではありません。2 番目のステップは、(jQuery を使用していると仮定して) myFunction
DOM のロードが完了したときに実行されるように jQuery に渡すことです。詳細については、jQuery のドキュメントを参照してください。
関数を変数に割り当てずに jQuery に渡す方が一般的です。
$(function() {
//function body
});
「$」が jQuery を表すと仮定すると (ここでは非常に明白なようです)、3 番目の構文は無名関数を定義し、それを引数として jQuery に渡します。これは、jQuery.DocumentReady のコールバックを登録するためのショートカットです。
私が関数定義と呼んでいるのは、そのうちの 1 つだけです。2 つ目です。1 つ目はグローバル jQuery オブジェクト (またはドル記号を使用するその他のライブラリ) をその関数で拡張するもので、3 つ目は奇妙です。