MVVM 模块中闭包的目的是啥? [复制]

Posted

技术标签:

【中文标题】MVVM 模块中闭包的目的是啥? [复制]【英文标题】:What's the purpose of closures in MVVM modules? [duplicate]MVVM 模块中闭包的目的是什么? [复制] 【发布时间】:2014-07-02 18:16:06 【问题描述】:

我正在处理以下内容:

define(["knockout"], function(ko) 

    var vm = this;

    (function()     // I'm tempted to delete this
        // init
        vm.data = ko.observable("");
        // other stuff         

    )();  // and this

    return vm;
);

写这篇文章的人说他们认为这是一个最佳实践,但不知道为什么。我知道这是一个闭包,但我们不需要闭包在这种情况下提供的任何“私有”功能,所以这对我来说似乎是噪音,但我可能忽略了一些东西。有什么意义?

【问题讨论】:

【参考方案1】:

您将在此问题的答案中找到有关该符号的完整解释:What is the purpose of wrapping whole javascript files in anonymous functions like “(function() … )()”?

短版(接受答案的样本):

当你写 (function() ... code ... )() 时,你在做什么,是 你在函数文字中编写代码(意思是整个 “对象”实际上是一个函数)。之后,您将自行调用 函数(最后的())。所以正如我提到的,这个的主要优势 之前,是你可以拥有私有方法/函数和属性:

> (function()     var private_var;
> 
>    function private_function() 
>      //code     )()

【讨论】:

谢谢!如果我已经在一个不需要进一步“内部”封装的 requireJS 模块中,这不会带来任何好处吗? 我认为您可以根据需要删除。另一方面,你真的需要吗?

以上是关于MVVM 模块中闭包的目的是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

js闭包是啥?

Swift 中的尾随闭包语法是啥?

C# 闭包中的 Lambda 表达式是啥?

C# 闭包中的 Lambda 表达式是啥?

Laravel 中的闭包是啥?

Swift 闭包中的 $0 和 $1 是啥意思?