为什么通过立即函数传递函数参数?

时间:2013-09-02 16:26:12

标签: javascript design-patterns

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

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分: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作为参数。

答案 1 :(得分:1)

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