我在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'命名空间'
的这些属性私有,我希望使用以下代码(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 () { }
}());
答案 0 :(得分:1)
它们是私有的,因为它们在闭包中定义并完全封装为闭包内的局部变量。
ns
也成为局部变量。关闭之外没有参考范围。
这是一个自调用闭包,定义的范围类似于在“普通”函数中定义局部变量。