jQuery中函数和自执行匿名函数的区别

3
正常函数与自执行匿名函数有什么区别?在哪些情况下应该使用自执行匿名函数?我真的不理解它们之间的区别。如何使用自执行匿名函数?

可能是JavaScript中自执行函数的目的是什么?的重复问题。 - Frédéric Hamidi
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/

我理解得对吗,SIAF中的变量不是全局变量?所以我不能在window-function中使用它们? - Yannic Hansen
它们并不是严格意义上的全局变量。但是,如果你在SIAF(或IIFE)中将它们公开,你就可以在JavaScript文件的其他地方访问它们。 - BenM

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

你拥有一个私钥,而不需要调用函数自行计算,用于计算私钥的密钥安全地存储在SIAF中。
用于命名空间。
  var fruits= (function() {
    return {
       name: ["apple", "orange"];
       color: [{"red","green"},"orange"]
    }
   })();

不需要在全局命名空间中声明fruitname、fruitcolor等内容,您可以从“fruits”获取所有内容。

为了自我调用的目的

$(function(){}); //seem familiar? -jquery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接