如何防止javascript解构赋值中的函数参数被具有相同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,

我正在尝试ES6 destructuring assignment功能将包含多个参数的options对象传递给函数,但其中一个参数被具有相同id的DOM元素覆盖

 //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变量具有默认值,则会出现问题。如果它是空的,那么就没有错误。