Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要通过直接函数传入函数参数?_Javascript_Design Patterns - Fatal编程技术网

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,所以我给您。