Javascript 什么';MVVM模块中闭包的用途是什么?
我正在与以下人员合作:Javascript 什么';MVVM模块中闭包的用途是什么?,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我正在与以下人员合作: 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; });
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;
});
写这篇文章的人说,他们认为这是一个最佳实践,但不知道为什么。我知道这是一个闭包,但我们不需要闭包在这个例子中提供的任何“私有”功能,所以这对我来说似乎是噪音,但我可能忽略了一些东西。要点是什么?在回答这个问题时,您会找到关于该符号的完整解释: 简短版本(已接受答案的样本): 编写(function(){…code…})()时要做的是 您将代码放在一个函数文本中(意思是整个 “对象”实际上是一个函数)。之后,您将自行调用 函数(最后的())。因此,正如我所提到的,这项技术的主要优势是 在此之前,您可以拥有私有方法/函数和属性:
非常感谢。如果我已经在一个requireJS模块中,不需要进一步的“内部”封装,这会不会带来任何好处?我想如果你想的话,你可以删除它。另一方面,你真的需要吗?
> (function() { var private_var;
>
> function private_function() {
> //code } })()