jsjs
jsjs copied to clipboard
ForIn的上下文有问题
https://github.com/bramblex/jsjs/blob/b0f67112f38ceb7eba8ecbf9357b8d6706e0dab1/src/eval.ts#L183
这里不应该是设置父级的作用域。
应该是设置for循环里的新作用域new_scope
亲测, 下面这个例子跑不痛。
import test from "ava";
import * as fs from "fs";
import vm from "../src/vm";
test("ForInStatement-1", t => {
const sandbox: any = vm.createContext({});
const obj: any = vm.runInContext(
`
const obj = {
1: false,
2: false
};
for (let attr in obj) {
obj[attr] = true;
}
module.exports = obj;
`,
sandbox
);
t.true(obj[1]);
t.true(obj[2]);
});
attr应该是 0、1,但实际上,永远是1,因为for循环里面的作用域没有attr变量。
只有父级作用域有attr,而且attr=1
嗯,这是个 bug ……