[英]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.