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 模块中闭包的目的是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章