避免 "Identifier '*' has already been declared" 错误

Avoid "Identifier '*' has already been declared" error

我正在制作一个客户端页面构建器,它可以让用户将脚本加载到 DOM 并将其移除。

问题是 - 尽管用户从 DOM 中删除了脚本元素,但 DOM 中的变量仍然可用。

当用户再次重新添加脚本时,会导致此错误。

"Identifier '*' has already been declared"

如何清除旧变量并避免此错误?

您可以将用户的代码包装在 IIFE (Immediately Invoked Function Expression) 中,以避免他们用自己设计的 const 来“污染”全局命名空间。

也就是说,如果用户输入(你的例子)

const test = () =>{
  console.log('hello')
}
test();

然后包装成

(() => {
  const test = () =>{
    console.log('hello')
  }
  test();
}())

并且 test 保留在 IIFE 中。

但是,这对例如

没有帮助
a = 9;

这仍然会隐式地将 a 分配给全局(window 命名空间),无论是否进行了 IIFE。