将参数传递给生成器函数

时间:2019-05-05 13:53:42

标签: javascript

我正在代码库(redux sagas)中学习生成器函数,并且看到像这样传入的参数

export function* someGenerator({ x, y = {} }) {

当我像

那样运行时
someGenerator('xyz', 'abc')

与常规函数一样,它是未定义的

我不了解({})部分,也不知道如何将参数传递给此类函数。

我正在尝试在另一个函数中调用生成器函数

2 个答案:

答案 0 :(得分:3)

该函数正在使用默认对象属性。它正在做两件事:

  • 如果将具有属性x的对象作为第一个参数提供给函数,则破坏属性x
  • 解构给定对象的属性y。如果没有参数的属性y,则会将其分配给空对象。

请参见以下示例:

function someGenerator({ x, y = {} }) {
  console.log(x)
  console.log(y)
}

someGenerator({x:'xyz',y:'abc'})

someGenerator({x:'xyz'}) // 'y' will empty object.

答案 1 :(得分:1)

这与generator

无关

默认功能参数允许在未传递值或未定义的情况下使用默认值初始化命名参数

export function* someGenerator({ x, y = {} }) {

按以下方式运行时:

someGenerator('xyz', 'abc')

这等效于:

let { x, y = {} } = 'xyz'

现在:

x equal to undefined
y equal to {}

因此您可以像这样使用它:

someGenerator({ x: 'param1', y: 'param2' })