在ES6 / ES2015中,我可以使用Object destructuring从作为函数参数传递的对象中提取字段:
function userId({id}) {
return id;
}
var user = {
id: 42,
};
console.log("userId: " + userId(user)); // "userId: 42"
在上面的示例中,id
函数中设置的userId
变量是否等同于通过var
,const
或let
进行设置?
以下哪一项是等效函数:
无功
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页面的示例函数,跳转到"从作为函数参数传递的对象中拉出字段)
答案 0 :(得分:6)
使用解构来声明变量使用相同的范围,就像您在同一位置声明普通变量一样。所以如果你这样做:
let {id} = {id: 42};
然后它是let
绑定,如果你这样做:
var {id} = {id: 42};
然后它是var
绑定。
函数参数类似于var
绑定,因为它们的范围限定为整个函数,而且它们不是const
。他们还喜欢let
绑定,因为它们的范围限定为当前块,即整个函数体。
答案 1 :(得分:1)
它将是一个局限于整个函数的局部变量(与所有函数参数一样),如第一个和第二个示例中所示(它们是等效的:let
和var
之间没有区别在函数的顶部)。