我正在研究THREE.js并注意到一个模式,其中函数的定义如下:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
Run Code Online (Sandbox Code Playgroud)
(示例请参见此处的 raycast方法).
这种方法的正常变化如下所示:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
Run Code Online (Sandbox Code Playgroud)
将第一个版本与正常变体进行比较,第一个版本似乎有不同之处:
因此,主要区别在于,在第一个变体中,条形图在初始化时仅分配一次,而第二个变体在每次调用时都创建此临时变量.
我最好猜测为什么使用它是为了限制bar的实例数(只有一个),从而节省了内存管理开销.
我的问题:
我创建了一个javascript类如下:
var MyClass = (function() {
function myprivate(param) {
console.log(param);
}
return {
MyPublic : function(param) {
myprivate(param);
}
};
})();
MyClass.MyPublic("hello");
Run Code Online (Sandbox Code Playgroud)
上面的代码是有效的,但我的问题是,如果我想将命名空间引入该类.
基本上我希望能够像这样调用类:
Namespace.MyClass.MyPublic("Hello World");
Run Code Online (Sandbox Code Playgroud)
如果我添加了Namespace.MyClass,它将抛出错误"语法错误".我确实尝试添加"window.Namespace = {}",但它也不起作用.
谢谢.. :)