避免 "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。
我正在制作一个客户端页面构建器,它可以让用户将脚本加载到 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。