Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';MVVM模块中闭包的用途是什么?_Javascript_Mvvm_Knockout.js - Fatal编程技术网

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    } })()