普通函数和自调用匿名函数之间有什么区别?在哪些情况下我应该使用自调用匿名函数?我真的没有区别他们。我如何使用SIAF?
答案 0 :(得分:2)
Javascript中的函数是一等公民,可以像对象一样传递。定义如下函数时:
function() { ... };
这就是你所做的一切。定义它。目前尚未使用它。您可以将其分配给变量,并在以后调用它,或者将变量作为参数传递给另一个函数。
自调用匿名函数是一个非常有用的模式组件,用于Javascript中的命名空间。我更喜欢使用更准确的名称来立即调用函数表达式(IIFE)。为了理解这种模式,我建议您阅读javascript中的闭包:How do JavaScript closures work?
(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/
答案 1 :(得分:1)
我确信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