Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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名称空间和私有变量_Javascript_Scope - Fatal编程技术网

Javascript名称空间和私有变量

Javascript名称空间和私有变量,javascript,scope,Javascript,Scope,我在HTML5/javascript/css培训指南中遇到了以下示例 我不明白为什么该方法中的私有变量作为私有变量添加到底层对象/命名空间中 (function () { this.myApp = this.myApp || {}; var ns = this.myApp; var vehicleCount = 5; var vehicles = new Array(); ns.Car = function () { } ns.Truck = function

我在HTML5/javascript/css培训指南中遇到了以下示例

我不明白为什么该方法中的私有变量作为私有变量添加到底层对象/命名空间中

(function () {
   this.myApp = this.myApp || {};
   var ns = this.myApp;
   var vehicleCount = 5;
   var vehicles = new Array();
   ns.Car = function () { }
   ns.Truck = function () { }
   var repair = {
   description: 'changed spark plugs',
   cost: 100
   };
}());
这是本书给出的解释:

IIFE(发音为iffy)是一个匿名函数表达式,它的末尾有一组括号,表示要执行该函数。匿名者 函数表达式用括号括起来,告诉JavaScript解释器函数不仅仅是被定义的;当文件加载时,它也会被执行。 在这个IIFE中,如果myApp名称空间不存在,那么第一行将创建它,这 表示用作命名空间的单例对象。接下来,创建一个ns变量(用于名称空间)作为名称空间的别名,以保存IIFE中的键入,因此ns可以 用于替代此.myApp。然后,定义名称空间的私有成员 通过使用var关键字。汽车和卡车是公共的,所以它们的前缀是ns

如果他们想使这些属性成为myApp“名称空间”的私有属性,我希望使用以下代码

(function () {
   this.myApp = this.myApp || 
      {
         var ns = this.myApp;
         var vehicleCount = 5;
         var vehicles = new Array();
         var repair = {
            description: 'changed spark plugs',
            cost: 100
            };
      };
   ns.Car = function () { }
   ns.Truck = function () { }
}());

它们是私有的,因为它们在闭包中定义,并在闭包中完全封装为局部变量。
ns
也成为局部变量。在闭包之外没有对范围的引用


这是一个自调用闭包,定义的范围类似于在“普通”函数中定义局部变量。

给定的代码甚至不适用于。所以,老实说,再找一本书/指南。关于这个话题的很多信息可能都是重复的。一些参考从微软的官方书籍70-480 HTML5/javascipt/css中获得。只是不明白那些var是如何绑定到ns对象的/namespace@Upperstage谢谢,您的链接清楚地说明了发生了什么:)