0

我了解立即函数的闭包用于创建私有变量;但我不确定以下两种模式之间的差异(如果有的话):

var fn = function() {
    var p = param;
    ...
};

var fn = (function(p) {
   ...
})(param);

在这两种情况下,p的范围都限于fn。那么为什么我有时会看到第二种模式?

提前致谢。

4

2 回答 2

2

您发布的两个代码片段不做同样的事情。

在第一个中,您正在创建一个fn存储对函数对象的引用的变量。在第二个代码片段中,您实际上是在调用匿名函数,并且fn并将存储返回值。

编辑

看来你不确定答案,所以我会详细说明。让我们用一个例子来解释一下每个的用法。我将编写一个简单的函数来演示:

var param = 5;
var fn = function(p) {
    return p * 2;
};

完成后,您将能够使用fn来调用该函数。所以,你可以稍后说:

var someVar = fn(param); // someVar will be equal to 10

另一方面,您的第二个示例:

var param = 5;
var fn = (function(p) {
    return p * 2;
})(param);

fn将存储数值10

笔记

在我的回答中,我将您的第一个函数更改为包含p为参数。

于 2013-09-02T16:33:49.657 回答
1

我不确定我是否理解你的问题,也不知道你是否理解你在做什么?
在第一个示例中,您创建了一个匿名函数,然后将其存储到变量fn中,但在第二个示例中,您创建了一个匿名函数,运行它,并将输出存储到变量fn中。因此,除非您p在第二个示例中返回,否则它根本不可见。
如果我错了,您可以自由纠正我;)

于 2013-09-02T16:34:48.877 回答