如果我对公众有一点“框架”,我怎样才能建立自己的“工作空间”?所以我可以使用我想要的变量名称吗?
我该如何完成?
答案 0 :(得分:0)
使用匿名函数包装器。使用var
定义的任何变量都不可用于包装器之外的代码。无论何时想要定义方法或属性,都要将它们添加到tobepublic
对象(最后返回)。
var your_namespace = (function(){
//Your own "workspace"
var tobepublic = {};
//Define any attributes and methods which should be public on tobepublic
tobepulic.helloWorld = function(){
alert("Hi!");
}
return tobepublic;
})();
公开地说,上面的代码看起来像下面的代码。但是,上述方法也可以访问私有方法/变量,这些方法/变量无法从“外部”看到:
var your_namespace = {
helloWorld: function(){
alert("Hi!");
}
}
答案 1 :(得分:0)
创建一个函数闭包局部范围。
此代码可能会为您解决一些问题。阅读评论。
<script type="text/javascript">
// global scope
function globalFunc(text) {
alert(text);
}
var privateFunc = null;
// function closure scope
(function(){
// closure function
function closureFunc(text) {
// can call global
globalFunc(text);
}
// let's make closure function accessible from global scope
// since privateFunc variable is in global scope
privateFunc = closureFunc;
})();
// call closure function
privateFunc("calling closure function");
// ERROR: this will not work due to function being in closure scope
closureFunc("calling closure function");
</script>
奇怪的功能括号实际上做了什么?
这是一些功能:
function name(someParameter) { ... }
将它放在括号中并在末尾添加一些,立即执行:
(function name(someParameter) { ... })("Parameter text value");
注意功能参数......
库通常使用本地范围来防止污染,更重要的是与其他可能的库冲突。想象两个库都定义了一个名为getName
的函数。最后一个定义它将简单地覆盖第一个实现,从而使第一个库出现故障。
当每个库创建自己的闭包范围时,他们可以创建任何函数,变量并使用它们而不必担心被覆盖。库通常只是将一些小部分暴露在全局范围内,因此其他脚本实际上可以使用该库。
(function() {
var closureVar = "I'm local";
globalVar = "I'm global";
// or
window.globalVar2 = "I'm global equivalent";
})();
省略var
或引用window
对象会使函数或变量成为全局函数。