Javascript名称空间和私有变量
我在HTML5/javascript/css培训指南中遇到了以下示例 我不明白为什么该方法中的私有变量作为私有变量添加到底层对象/命名空间中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
(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谢谢,您的链接清楚地说明了发生了什么:)