return语句中的Javascript函数

return语句中的Javascript函数,javascript,function,Javascript,Function,我开始学习javascript,现在还在学习。我在代码中遇到了不同的函数声明。funcA、funcB和funcX之间有什么区别?在代码funcA中,funcB在模块内使用,funcX和funcY在模块外被称为someModule.funcX()。可能很简单,但我不知道这叫什么,甚至做一个研究。任何指点都将不胜感激 var someModule = (function() { var funcA = (function() {...})(); var funcB = functio

我开始学习javascript,现在还在学习。我在代码中遇到了不同的函数声明。
funcA
funcB
funcX
之间有什么区别?在代码
funcA
中,
funcB
在模块内使用,
funcX
funcY
在模块外被称为
someModule.funcX()
。可能很简单,但我不知道这叫什么,甚至做一个研究。任何指点都将不胜感激

var someModule = (function() {
    var funcA = (function() {...})();
    var funcB = function() {...};

    return {
        funcX: function(){...},
        funcY: function(){...}
    };
})();

这只是一个模块模式。 其编写方式与显示模块模式非常相似

基本上,您可以看到函数返回的东西(任何东西,实际上)是模块的公共接口(请注意,接口不是指需要实现的接口,而是与模块交互的端点,如API)

实现这一点的经典方法(作为显示模块模式)实际上是:

var someModule = (function() {
    var funcA = (function() {...})();
    var funcB = function() {...};
    var funcX = function(){...}
    var funcY = function(){..}
    return {
        funcX: funcX,
        funcY: funcY
    };
})();
之所以称之为显示模块模式,是因为您定义了您的模块以及模块中的所有私有和公共函数,最后您显示了您想要公开的内容

这使得理解内部发生的事情变得容易,并在必要时对其进行更改


快速了解各种模块模式的一个好资源是

这只是一个模块模式。 其编写方式与显示模块模式非常相似

基本上,您可以看到函数返回的东西(任何东西,实际上)是模块的公共接口(请注意,接口不是指需要实现的接口,而是与模块交互的端点,如API)

实现这一点的经典方法(作为显示模块模式)实际上是:

var someModule = (function() {
    var funcA = (function() {...})();
    var funcB = function() {...};
    var funcX = function(){...}
    var funcY = function(){..}
    return {
        funcX: funcX,
        funcY: funcY
    };
})();
之所以称之为显示模块模式,是因为您定义了您的模块以及模块中的所有私有和公共函数,最后您显示了您想要公开的内容

这使得理解内部发生的事情变得容易,并在必要时对其进行更改


快速了解各种模块模式的一个很好的资源是

如果您只想了解所有函数之间的差异,那么这里就是差异

funcA
funcB
funcX
funcY
之间的第一个区别

无论我们在
return
语句中拥有什么,都可以通过
someModule
访问。所以我们可以在下面做这两件事

someModule.funcX();
someModule.funcY();
但是我们不能做
someModule.funcA()或someModule.funcB()
。要理解为什么我们可以这样做,就是要理解
()
的行为。 将执行置于括号内的任何表达式,并在括号内返回结果。所以在这个例子中,我们在这些括号中放了一个
函数
,这样一个匿名函数将在内存中创建,它的对象将在这里返回

现在我们在函数声明之后又放了一对括号。因此,这里发生的是
(返回的函数对象)(
)。因此,将立即调用此函数,并返回一个对象,该对象包含两个属性
funcX
funcY
,其值为function

现在转到函数内部的第二部分。这里
funcA
funcB
之间的区别在于
funcA
someModule
相同,也就是说,它也是一个生命,取决于
funcA
的主体,如果我们从
funcA
的主体内部返回函数对象,然后它也将是一个函数,否则它将包含我们从
funcA
主体内部返回的任何内容

除此之外,所有其他都是简单的函数


而且,与所问问题无关。我们可以访问
funcA
funcB
内部的
funcX
funcY
,即使在执行了包含函数之后,我们仍然可以访问这两个函数。有关此行为的更多详细信息,请查看JavaScript中的闭包。快乐学习(JavaScript.)

如果您只想了解所有函数之间的差异,那么这里就是差异

funcA
funcB
funcX
funcY
之间的第一个区别

无论我们在
return
语句中拥有什么,都可以通过
someModule
访问。所以我们可以在下面做这两件事

someModule.funcX();
someModule.funcY();
但是我们不能做
someModule.funcA()或someModule.funcB()
。要理解为什么我们可以这样做,就是要理解
()
的行为。 将执行置于括号内的任何表达式,并在括号内返回结果。所以在这个例子中,我们在这些括号中放了一个
函数
,这样一个匿名函数将在内存中创建,它的对象将在这里返回

现在我们在函数声明之后又放了一对括号。因此,这里发生的是
(返回的函数对象)(
)。因此,将立即调用此函数,并返回一个对象,该对象包含两个属性
funcX
funcY
,其值为function

现在转到函数内部的第二部分。这里
funcA
funcB
之间的区别在于
funcA
someModule
相同,也就是说,它也是一个生命,取决于
funcA
的主体,如果我们从
funcA
的主体内部返回函数对象,然后它也将是一个函数,否则它将包含我们从
funcA
主体内部返回的任何内容

除此之外,所有其他都是简单的函数

而且,不是
(function(){return 30})();
var b = (function(){return 30})();