Javascript - 将对象属性转换为函数范围内的变量

Isa*_*son 7 javascript variables scope properties object

这就是我想要实现的目标:

let scope = { property: "value" };
function fun()
{
  //That's how I can get my variables:
  console.log(this.property);

  //And that's how I want to get them
  console.log(property);
}
fun.call(scope);
Run Code Online (Sandbox Code Playgroud)

但是当然bind()函数不能像那样工作.我的想法是这样做:

let scope = { property: "value" }
function fun(scope)
{
  for (let p in scope)
  {
    if (scope.hasOwnProperty(p))
      window[p] = scope[p];
  }
  // Now it works
  console.log(property);
}
fun(scope);
Run Code Online (Sandbox Code Playgroud)

不幸的是,通过这样做,变量在全局范围内声明,垃圾收集器在执行函数后不会释放它们.所以我必须在我的函数结束时添加这样的东西:

for (let p in scope)
{
  if (scope.hasOwnProperty(p))
    delete window[p];
}
Run Code Online (Sandbox Code Playgroud)

但是我们都知道删除操作符很重,所以我想省略使用它.这就是为什么我正在寻找一种方法将对象属性转换为函数范围内的变量.

PS:我不能使用解构赋值,因为我不知道对象属性的名称.

小智 3

除了使用窗口对象之外,您还可以选择使用eval

let scope = { property: "value" }
function fun(scope)
{
  for (let p in scope)
  {
    if (scope.hasOwnProperty(p))
      eval("var " + p + " = scope[p];");
  }
  console.log(property);
}
fun(scope);
Run Code Online (Sandbox Code Playgroud)

另请参阅:如何在 javascript 中声明和使用动态变量?