Skip to content

ForIn的上下文有问题 #3

@axetroy

Description

@axetroy

scope.$declar(kind, name, value)

这里不应该是设置父级的作用域。

应该是设置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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions