将参数传递给生成器函数

3

我正在学习代码库(redux sagas)中的生成器函数,并发现传入了像这样的参数:

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

当我运行它时,像这样:
someGenerator('xyz', 'abc')

就像常规函数一样,它返回未定义(undefined)。

我不理解 ({}) 部分或者如何向这样一个函数传递参数。

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

2个回答

2

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

  • 如果提供的第一个参数是具有属性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.


请注意,此示例中的函数不是生成器;这不是特定于生成器的语法。还要注意,JavaScript每次都会为y创建一个新的{} - wizzwizz4

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' })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接