Javascript Object Destructure赋值是使用const,let还是var?

时间:2016-12-22 01:31:45

标签: javascript ecmascript-6

在ES6 / ES2015中,我可以使用Object destructuring从作为函数参数传递的对象中提取字段:

function userId({id}) {
  return id;
}

var user = { 
  id: 42, 
};

console.log("userId: " + userId(user)); // "userId: 42"

在上面的示例中,id函数中设置的userId变量是否等同于通过varconstlet进行设置?

以下哪一项是等效函数:

无功

function userId(user) {
    var id = user.id
    return id;
}

可让

function userId(user) {
    let id = user.id
    return id;
}

CONST

function userId(user) {
    const id = user.id
    return id;
}

(上面链接的MDN页面的示例函数,跳转到"从作为函数参数传递的对象中拉出字段)

2 个答案:

答案 0 :(得分:6)

使用解构来声明变量使用相同的范围,就像您在同一位置声明普通变量一样。所以如果你这样做:

let {id} = {id: 42};

然后它是let绑定,如果你这样做:

var {id} = {id: 42};

然后它是var绑定。

函数参数类似于var绑定,因为它们的范围限定为整个函数,而且它们不是const。他们还喜欢let绑定,因为它们的范围限定为当前块,即整个函数体。

答案 1 :(得分:1)

它将是一个局限于整个函数的局部变量(与所有函数参数一样),如第一个和第二个示例中所示(它们是等效的:letvar之间没有区别在函数的顶部)。