【发布时间】:2013-08-01 14:34:30
【问题描述】:
我很困惑,其中哪一种是声明此对象的最有效/最佳实践方式。
在我重用的函数内部,但我认为这意味着每次调用函数时都会声明它
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
}
})();
或者还有什么我没有考虑过的?
【问题讨论】:
-
为什么人们在投反对票时不能发表评论?如果没有解释为什么有人不喜欢我的问题,那么我下次不知道并且能够纠正这个错误吗?
-
在您的第三个示例中,请注意
mapVals函数将无法被该范围之外的任何东西访问(可以修改以允许它),但它不会做任何事情。 -
这还取决于您对
myObj所做的什么。在您的示例中,您只是从中得到 东西。如果您正在修改对象并且您不希望所有函数共享该对象(由于某种原因,它们每个都需要修改本地副本),那么您必须坚持使用第一个示例。否则,您的第二个和第三个示例 share 单个对象(可能需要也可能不需要) -
@Ian 我只是从对象中检索数据而已。该函数将在一组复选框的状态更改时调用,然后我将使用其映射值的字符串(列表)填充隐藏字段。我不知道如果用户在一次又一次地声明对象方面单击左右和中心的东西,第一个选项是否代价高昂。
-
嗯,是的,我认为这会很昂贵,因为它必须在每次函数调用时创建对象。所以我会坚持第三个,因为它不会在全球范围内公开
myObj。 NickTomlin 的回答很棒,我会同意的
标签: javascript object scope