我很困惑这些是宣布这个对象的最有效/最佳实践方式。
在函数内部我重复使用,但我认为这意味着每次调用函数时都会声明它
function mapVals(ele){
var myObj = {
"chkOne" : "HV1",
"chkTwo" : "HV2",
"chkThree" : "HV3"
}
var thisVal = myObj[ele.id];
//Other code
}
在函数之外,但它正在污染全局命名空间
var myObj = {
"chkOne" : "HV1",
"chkTwo" : "HV2",
"chkThree" : "HV3"
}
function mapVals(ele){
var thisVal = myObj[ele.id];
//Other code
}
或许是一种创建临时范围的封装技术?我知道语法,但以前没有使用它。
(function(){
var myObj = {
"chkOne" : "HV1",
"chkTwo" : "HV2",
"chkThree" : "HV3"
}
function mapVals(ele){
var thisVal = myObj[ele.id];
//Other code
}
})();
还是我还没考虑过的其他事情?
答案 0 :(得分:2)
第三个是你所呈现的三个中最“安全”的,但它几乎没有效用,因为在你最初调用它之后它里面的对象是不可访问的。
根据您想要做的事情的复杂程度,简单的module模式可能是最佳选择:
var module = (function(){
var myObj = {
"chkOne" : "HV1",
"chkTwo" : "HV2",
"chkThree" : "HV3"
};
return {
mapVals: function (ele){
var thisVal = myObj[ele.id];
},
setVal: function (prop,value) {
myObj[prop] = value;
},
getVal : function (val) {
return myObj[val];
}
};
})();
// we can access and modify properties of myObj within the closure
module.mapVals('chkOne');
module.setVal('foo','bar');
console.log(module.getVal('foo'));
<强> JSbin 强>
这允许您在闭包中“密封”代码,其中myObj
仅定义一次,但也导出方法以进一步访问myObj
(或模块内声明的其他变量)应用。这是closures的力量的一小部分。
答案 1 :(得分:0)
如果您不想污染全局命名空间,第三个选项可能是您最好的选择。