[英]Javascript function within return statement
我从javascript开始新的学习,并且还在学习。 我遇到了带有不同函数声明的这段代码。 funcA
, funcB
和funcX
什么funcX
? 在代码funcA
, funcB
在模块内使用, funcX
和funcY
在模块外部作为someModule.funcX()
调用。 可能非常简单,但我不知道进行什至是什么rearch。 任何指针将不胜感激。
var someModule = (function() {
var funcA = (function() {...})();
var funcB = function() {...};
return {
funcX: function(){...},
funcY: function(){...}
};
})();
如果您只是想要所有功能之间的差异,这里就是差异。
funcA
, funcB
和funcX
, funcY
之间的第一个区别。
无论我们有内部return
声明将是访问someModule
。 所以我们可以在下面做这两个
someModule.funcX();
someModule.funcY();
但是我们不能执行someModule.funcA() or someModule.funcB()
。 要了解为什么可以这样做,就是要了解()
行为。 放在括号内的任何表达式都将执行,并在此返回结果。 因此,在此示例中,我们在这些括号内放置了一个function
,因此将在内存中创建一个匿名函数,并将在此处返回其对象。
现在,在函数声明之后,我们又放了一对括号。 因此,这里发生的是(returned function object)()
。 因此,将立即调用此函数,并且将返回包含两个属性funcX
和funcY
其值为函数)的对象。
现在转到函数内部的第二部分。 这里的区别funcA
和funcB
是, funcA
是相同someModule
即它也是一个IIFE并根据身体funcA
,它会决定,如果我们从身体内部返回函数对象funcA
,那么它也将是一个函数,否则它将包含我们从funcA
体内返回的funcA
。
除此之外,其他所有功能都很简单。
另外,与要求的内容无关。 我们可以访问funcA
和funcB
内funcX
和funcY
,并执行然后我们也仍然能够访问这些功能都包含连功能之后。 有关此行为的更多详细信息,请查找JavaScript中的闭包。 快乐学习JavaScript。 :)
这只是一个模块模式。 编写方式与显示模块模式非常相似。
基本上,该函数返回的东西(实际上是任何东西)实际上是模块的公共接口(请注意,通过接口我并不意味着需要实现该接口,仅是这是与模块进行交互的端点,例如API)。
做到这一点的经典方法(作为显示模块模式)实际上是:
var someModule = (function() {
var funcA = (function() {...})();
var funcB = function() {...};
var funcX = function(){...}
var funcY = function(){..}
return {
funcX: funcX,
funcY: funcY
};
})();
之所以称为显示模块模式,是因为您定义了模块以及该模块中的所有私有和公共功能,最后您还揭示了要公开的内容。
这样可以轻松了解内部发生的情况,并在必要时进行更改。
该站点是快速了解各种模块模式的好资源
安德鲁,
因此,这有点令人困惑,但这是非常基本的javascript怪异。
您可以将函数保存在这样的变量中:
var a = function(){return 30}
这里a
函数本身。 然后,您可以使用()调用此函数:
a() // result is 30;
或者,我可以忘记变量,而只需在末尾添加()来调用函数:
(function(){return 30})();
尽管我们没有将其分配给任何对象,但这也导致了30。
现在,如果我将最后一个赋值给变量:
var b = (function(){return 30})();
不像a
上面,它拥有本身的功能,B保存结果,不管这可能是中,调用函数- b为30,因为函数被调用, 然后将结果分配给b。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.