如何防止javascript解构赋值中的函数参数被具有相同ID的DOM元素覆盖
我正在尝试ES6 destructuring assignment功能将包含多个参数的options对象传递给函数,但其中一个参数被具有相同id的DOM元素覆盖如何防止javascript解构赋值中的函数参数被具有相同ID的DOM元素覆盖,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在尝试ES6 destructuring assignment功能将包含多个参数的options对象传递给函数,但其中一个参数被具有相同id的DOM元素覆盖 //javascript function call: createPicture({name: "aaa", width: 100, height: 100, tags: [] }) //javascript function declaration: createPicture({name,
//javascript function call:
createPicture({name: "aaa", width: 100, height: 100, tags: [] })
//javascript function declaration:
createPicture({name, width, height, tags}) {
console.log(tags) //prints a DOM element with id "tags" instead of an empty array!
}
我知道ID为的DOM元素在JS中创建全局变量,但我觉得很奇怪,它在函数调用中覆盖了对象中的属性。有没有办法保护javascript代码
编辑:我根据建议添加了一个JSFIDLE来确认这个问题。如果函数声明中的标记具有默认值,则会出现问题。如果它是空的,那么就没有错误
如果函数声明中的标记具有默认值,则会出现问题
function createPicture({name, width, height, tags: []}) { … }
这不是默认值,而是进一步分解为空数组模式。它不声明任何参数,也不引入任何局部变量,因此当您记录标记时,确实会得到全局变量(出于遗留原因)
你的模式就像
function createPicture(arg) {
var name = arg.name,
width = arg.width,
height = arg.height,
[] = arg.tags;
…
}
您实际需要的默认初始化器写为
function createPicture({name, width, height, tags = []}) { … }
// ^
不是。一个解构模式参数确实会创建局部变量。除非您在函数中传入或分配DOM元素,否则这是不可能获取DOM元素的。请发布a-您发布的代码按预期工作(修复语法错误后)hello@Bergi我按要求添加了小提琴。我确认如果声明中的tags变量具有默认值,则会出现问题。如果它是空的,那么就没有错误。