3

普通函数和自调用匿名函数有什么区别?在哪些情况下我应该使用自调用匿名函数?我真的不明白他们之间的区别。我如何使用 SIAF?

4

2 回答 2

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/

于 2013-09-20T09:46:46.577 回答
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
于 2013-09-20T10:12:46.637 回答