【发布时间】:2019-07-29 03:33:43
【问题描述】:
我想知道for .. in 会有什么副作用?
let arr = [1.1, 2.2];
let obj = {x: 1, y: 1, z: 1};
for(let prop in obj) {
...
}
考虑到上面的 sn-p 代码,是否可以在 for .. in 语句中更改不在循环体中的 arr 中的某些元素?
我目前正在分析 JavaScriptCore JIT 编译器,DFG 假设 GetPropertyEnumerator 有副作用,我知道它可以更改 for .. in 语句中的其他对象。
但是,我不知道这怎么可能。
所以我想这是可能的,如果可能的话,我该怎么做。
【问题讨论】:
-
如果你的对象有getter/proxy,那些可能会产生副作用……虽然那会是愚蠢的getter。但有点不清楚您是尝试改变某些东西还是想要避免隐式改变某些东西。
-
@deceze 只有在访问
obj[prop]时才会调用getter/代理(这将发生在循环体内)? -
@CertainPerformance 对于 getter 为 true,但代理提供 has trap,它将由循环触发。
-
正如@CertainPerformance 所说,只有在访问对象成员时才会触发获取器/代理。
-
问题更新了!
标签: javascript side-effects javascriptcore