繁体   English   中英

return语句中的Javascript函数

[英]Javascript function within return statement

我从javascript开始新的学习,并且还在学习。 我遇到了带有不同函数声明的这段代码。 funcAfuncBfuncX什么funcX 在代码funcAfuncB在模块内使用, funcXfuncY在模块外部作为someModule.funcX()调用。 可能非常简单,但我不知道进行什至是什么rearch。 任何指针将不胜感激。

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

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

如果您只是想要所有功能之间的差异,这里就是差异。

funcAfuncBfuncXfuncY之间的第一个区别。

无论我们有内部return声明将是访问someModule 所以我们可以在下面做这两个

someModule.funcX();
someModule.funcY();

但是我们不能执行someModule.funcA() or someModule.funcB() 要了解为什么可以这样做,就是要了解()行为。 放在括号内的任何表达式都将执行,并在此返回结果。 因此,在此示例中,我们在这些括号内放置了一个function ,因此将在内存中创建一个匿名函数,并将在此处返回其对象。

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

现在转到函数内部的第二部分。 这里的区别funcAfuncB是, funcA是相同someModule即它也是一个IIFE并根据身体funcA ,它会决定,如果我们从身体内部返回函数对象funcA ,那么它也将是一个函数,否则它将包含我们从funcA体内返回的funcA

除此之外,其他所有功能都很简单。

另外,与要求的内容无关。 我们可以访问funcAfuncBfuncXfuncY ,并执行然后我们也仍然能够访问这些功能都包含连功能之后。 有关此行为的更多详细信息,请查找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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM