通常の関数と自己呼び出し匿名関数の違いは何ですか? そして、どのような場合に自己呼び出し匿名関数を使用する必要がありますか? 私は本当にそれらの違いを理解していません。また、SIAF の使用方法を教えてください。
2 に答える
Javascript の関数は第一級市民であり、オブジェクトのように渡すことができます。関数を次のように定義すると、次のようになります。
function() { ... };
あなたがしているのはそれだけです。それを定義します。現時点では使用されていません。それを変数に割り当てて、必要に応じて後で呼び出すか、変数を別の関数に引数として渡すことができます。
自己呼び出し匿名関数は、Javascript の名前空間に使用される非常に便利なパターン コンポーネントです。すぐに呼び出される関数式 (IIFE) のより正確な名前を使用することを好みます。このパターンを理解するには、javascript のクロージャーについて読むことをお勧めします: JavaScript クロージャーはどのように機能しますか?
(function(namespace, $, undefined){ //undefined is specified here as it can be overwritten in javascript. This ensures we have a true undefined value within our namespace. Make sure not to pass in any argument for this.
var text = "hello world"; // private member
var namespace.text = "hellow world"; //public member
}(window.namespace = window.namespace || {}, jQuery)); //This section calls this function immediately and creates a closure. We pass in the window.namespace argument to give us access to all public member of the namespace.
これにより、グローバル スコープの汚染を回避し、プライベートな関数とメンバーを定義できる名前空間が提供されます。
詳細については、http: //benalman.com/news/2010/11/immediately-invoked-function-expression/をご覧ください。
SIAFには多くの用途があると確信しています! しかし、主に名前空間とプライバシーに使用されます!
プライバシーのため
var normalkey=89000333;
var privateKey= (function(param){
var secretkey = 123411;
//it is private , nothing outside this function will know of it
var newkey=param+secretkey ;
return newkey
})(normalkey); //passing normalkey as param
自分で計算する関数を呼び出さずに privateKey を取得し、privateKey の計算に使用される秘密鍵は SIAF 内で安全です。
名前空間用
var fruits= (function() {
return {
name: ["apple", "orange"];
color: [{"red","green"},"orange"]
}
})();
グローバル名前空間でfruitname、fruitcolorなどを宣言する代わりに、「fruits」からすべてを取得できます
自己呼び出しの目的で
$(function(){}); //seem familiar? -jquery