我知道立即函数的闭包用于创建私有变量;但我不确定以下两种模式之间的差异,如果有的话:
var fn = function() {
var p = param;
...
};
和
var fn = (function(p) {
...
})(param);
在这两种情况下,p
的范围仅限于fn
。那么为什么我有时会看到第二种模式?
提前致谢。
答案 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
,否则它根本不可见
如果我错了,你可以自由纠正我;)