Javascript 为什么作为函数参数的内联解构不能按预期工作

Javascript 为什么作为函数参数的内联解构不能按预期工作,javascript,destructuring,Javascript,Destructuring,假设我有一段代码需要访问一个状态对象,如下所示 const store = { getState: () => ({ a: "test", b: 1, c: 23, }) } function printState(_ref) { var a = _ref.a, b = _ref.b, rest = _objectWithoutProperties(_ref, ["a", "b"]); console.log(a, b,

假设我有一段代码需要访问一个状态对象,如下所示

const store = {
  getState: () => ({
    a: "test",
    b: 1,
    c: 23,
  })
}
function printState(_ref) {
  var a = _ref.a,
      b = _ref.b,
      rest = _objectWithoutProperties(_ref, ["a", "b"]);

  console.log(a, b, rest);
}

printState((_store$getState = store.getState(),
             a = _store$getState.a,
             b = _store$getState.b, 
             _store$getState)
);
一个类似这样的辅助函数,
rest
是为了说明这样一个事实,即它的输出将不仅仅是我传入的解构参数

function printState ({a, b, ...rest}) {
  console.log(a, b, rest)
}
所以如果我尝试使用内联解构

printState({ a, b } = store.getState())
上面的输出是

"test" 1 Object {
  c: 23
}

我只希望传入
a
b
,而不是对象的其余部分。有人知道为什么会这样吗?

{a,b}=store.getState()
是一个赋值表达式,它返回的值将始终是右侧的表达式,即
store.getState()

如果您只想要
a
b
,则可以使用和iLife

const存储={
getState:()=>({
答:“测试”,
b:1,
c:23,
})
}
函数printState({a,b,…rest}){
控制台日志(a、b、rest)
}
printState((({a,b})=>({a,b}))(store.getState())
因为它是一个赋值表达式,返回右边的值,所以您的this函数调用实际上是这样计算的

const store = {
  getState: () => ({
    a: "test",
    b: 1,
    c: 23,
  })
}
function printState(_ref) {
  var a = _ref.a,
      b = _ref.b,
      rest = _objectWithoutProperties(_ref, ["a", "b"]);

  console.log(a, b, rest);
}

printState((_store$getState = store.getState(),
             a = _store$getState.a,
             b = _store$getState.b, 
             _store$getState)
);
因此,实际上您最终得到的是
printState(store.getState())


您可以将代码粘贴到此处,并查看

Destruction允许您公开所需的属性,而无需在代码中添加额外的行,它不会将它们从对象上切掉,它只是一种语法糖而已