Javascript 为什么要通过直接函数传入函数参数?
我知道立即函数的闭包用于创建私有变量;但我不确定以下两种模式之间是否存在差异:Javascript 为什么要通过直接函数传入函数参数?,javascript,design-patterns,Javascript,Design Patterns,我知道立即函数的闭包用于创建私有变量;但我不确定以下两种模式之间是否存在差异: var fn = function() { var p = param; ... }; 及 在这两种情况下,p的范围仅限于fn。那么为什么我有时会看到第二种模式呢 提前感谢。您发布的两个代码片段做的事情不一样 在第一个示例中,您正在创建一个变量fn,该变量存储对函数对象的引用。在第二个代码段中,您实际上是在调用匿名函数,fn将存储返回值 编辑 你似乎不确定答案,所以我会详细说明。让我们用一个例子来解
var fn = function() {
var 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
将存储返回值
编辑
你似乎不确定答案,所以我会详细说明。让我们用一个例子来解释每种方法的用法。我将构造一个简单的函数来演示:
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
,否则它应该根本不可见。如果我错了,你可以纠正我;) 我不确定我是否理解你的问题,也不确定你是否理解你在做什么?
在第一个示例中,创建一个匿名函数,然后将其存储到变量
fn
,但在第二个示例中,创建一个匿名函数,运行它,并将输出存储到变量fn
。因此,除非在第二个示例中返回p
,否则它应该根本不可见。如果我错了,你可以纠正我;) 嗯,您和“javascript是未来的”的说法是正确的,在第一个示例中,
fn
被分配一个函数对象,在第二个示例中被分配函数的返回值(如果有的话)。但我认为使用后者的原因是,在函数中执行的计算只执行一次。例如,如果param
是一个URL,并且匿名函数返回一个带有查询字符串属性和值的对象,那么该函数只执行一次,并将返回值分配给fn
。在第一个示例中,fn
必须在每次调用函数时解析URL。第二个示例中,函数仅执行一次。在第一个示例中,存储了对函数对象的引用,您可以根据需要多次执行它。嗯,您和“javascript是未来的”的说法是正确的,第一个示例中为fn
分配了函数对象,第二个示例中为函数分配了返回值(如果有)。但我认为使用后者的原因是,在函数中执行的计算只执行一次。例如,如果param
是一个URL,并且匿名函数返回一个带有查询字符串属性和值的对象,那么该函数只执行一次,并将返回值分配给fn
。在第一个示例中,fn
必须在每次调用函数时解析URL。第二个示例中,函数仅执行一次。在第一个示例中,存储了对函数对象的引用,您可以根据需要多次执行它。您用鼻子打败@Nasser,所以我给您。您用鼻子打败@Nasser,所以我给您。