我了解立即函数的闭包用于创建私有变量;但我不确定以下两种模式之间的差异(如果有的话):
var fn = function() {
var p = param;
...
};
和
var fn = (function(p) {
...
})(param);
在这两种情况下,p
的范围都限于fn
。那么为什么我有时会看到第二种模式?
提前致谢。
我了解立即函数的闭包用于创建私有变量;但我不确定以下两种模式之间的差异(如果有的话):
var fn = function() {
var p = param;
...
};
和
var fn = (function(p) {
...
})(param);
在这两种情况下,p
的范围都限于fn
。那么为什么我有时会看到第二种模式?
提前致谢。
您发布的两个代码片段不做同样的事情。
在第一个中,您正在创建一个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
为参数。
我不确定我是否理解你的问题,也不知道你是否理解你在做什么?
在第一个示例中,您创建了一个匿名函数,然后将其存储到变量fn
中,但在第二个示例中,您创建了一个匿名函数,运行它,并将输出存储到变量fn
中。因此,除非您p
在第二个示例中返回,否则它根本不可见。
如果我错了,您可以自由纠正我;)