繁体   English   中英

JavaScript命名空间和私有变量

[英]Javascript namespace and private variables

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

我不明白为什么将方法中的私有变量作为私有变量添加到基础对象/命名空间ns中。

(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代替this.myApp。 之后,使用var关键字定义名称空间的私有成员。 汽车和卡车是公共的,因此以ns为前缀。

如果他们希望将这些属性设置为myApp'namespace'的私有属性,则希望使用以下代码

(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成为局部变量。 在闭包之外没有涉及范围的参考。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM