我试图限制暴露给位于隔离闭包中的eval
的局部变量的数量,以保持范围尽可能不受污染。但我还需要遍历传递的数组,因此我正在做与此非常类似的事情:
var oObj = [{
key: "",
arr: {
"one": 1,
"two": 2,
"three": 3
}
}];
for (oObj[0].key in oObj[0].arr) {
console.log(oObj[0].arr[oObj[0].key]);
}
在我的实际代码中,oObj
作为第一个参数传递到闭包函数中(例如 arguments[0]
),以便暴露给唯一的局部变量该函数是arguments
(无论如何都会公开)。
此代码按预期工作,但是 jshint.com针对此代码块列出不少于 12 个警告。
那么...我是否把范围推得太远了,或者我是否符合标准? for-in
循环可以使用 object.property
作为 key
吗? JSHint 似乎并不这么认为,而我尝试过的一切似乎都很满意。
最佳答案
According to the ECMAScript standards ,for-in 循环的语法是
IterationStatement : for ( LeftHandSideExpression in Expression ) Statement
和a LeftHandSideExpression can be a CallExpression ,这还可以是
CallExpression . IdentifierName
所以,是的,根据标准,这是一个有效的 for-in 循环。
但这是否令人困惑?是的。为什么不直接做这样的事情:
for (key in oObj[0].arr) {
oObj[0].key = key;
console.log(oObj[0].arr[key]);
}
关于javascript - 这个 for-in 循环符合标准吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682194/