在javascript中,如何;对于在;声明会有副作用吗?

在javascript中,如何;对于在;声明会有副作用吗?,javascript,side-effects,javascriptcore,Javascript,Side Effects,Javascriptcore,我想知道..的方法。。在中会有任何副作用吗 让arr=[1.1,2.2]; 设obj={x:1,y:1,z:1}; 用于(让道具插入obj){ ... } 考虑到上述代码片段,是否可以更改arratfor。。in语句不在循环体中 我目前正在分析JavaScriptCore JIT编译器,DFG假设GetPropertyEnumerator有副作用,我知道它可以在处更改其他对象。。在语句中。 但是,我不知道这怎么可能。 所以我想知道这是可能的,如果可能的话,我该怎么做。我自己找到了这个问题的答案

我想知道..的
方法。。在
中会有任何副作用吗

让arr=[1.1,2.2];
设obj={x:1,y:1,z:1};
用于(让道具插入obj){
...
}
考虑到上述代码片段,是否可以更改
arr
at
for。。in
语句不在循环体中

我目前正在分析JavaScriptCore JIT编译器,DFG假设
GetPropertyEnumerator
有副作用,我知道它可以在
处更改其他对象。。在
语句中。
但是,我不知道这怎么可能。

所以我想知道这是可能的,如果可能的话,我该怎么做。

我自己找到了这个问题的答案:)

上面的提交日志对我很有帮助

代理
对象的成员名为
getPrototypeOf

通过使用这个
getPrototypeOf
,我可以在
for.的属性查找阶段修改一些对象。。在
语句中

设a={x:1,y:2,z:3};
a、 _uuuproto_uuuu={xx:1,yy:2,zz:3};
为了(让我进来){
印刷品(一);
}
上面一个是简单的例子。
。。在
语句中,查找对象
a的属性,然后按照a的\uuuuu proto\uuuu链进行操作。
在这种情况下,代理的
getPrototypeOf
\uuuuuuuuuuuuuuuuuuuuu
查找的陷阱。
下面是一个例子

a={
x:1,
y:2,
z:3
};
设p=新代理(a{
getPrototypeOf:function(){
log(“getPrototypeOf-这里可能会产生副作用”);
返回{
答:1,,
b:2
};
}
});
for(让我输入p){
控制台日志(i);

}
如果你的对象有getter/proxy,这些可能会产生副作用……尽管这是愚蠢的getter。但不清楚您是在尝试更改某些内容,还是希望避免隐式更改某些内容。@只有在访问
obj[prop]
时(这将发生在循环体内部),才会调用deceze的getter/proxies。@CertainPerformance true for getter,但代理提供了一个将由循环触发的问题。正如@CertainPerformance所说的,只有在访问对象成员时才会触发getter/代理。并且问题会被更新!请在这里提供答案的要点。如果没有该链接,此答案根本不包含任何有用的内容。感谢您的反馈:)@decezeCool!我将您的
print(
调用(尝试打印当前页面)更改为
console.log
调用(记录传递的参数),希望这样可以。您还可以为
ownKeys
设置陷阱,这可能更简单一些。