Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:去盎司函数中的参数是什么_Javascript - Fatal编程技术网

Javascript JS:去盎司函数中的参数是什么

Javascript JS:去盎司函数中的参数是什么,javascript,Javascript,我试图在我正在处理的现有代码库中掌握一个去盎司函数,但我有一个问题,在看它的时候我无法理解。在此场景中,(…args)是什么?我知道这是一个rest参数,但它来自哪里?这里的args的用途是什么?为什么它不能是空的,然后像setTimout中的fn()那样调用呢 const debounce = (fn, delay) => { let id; return function(...args) { if (id) { clearTime

我试图在我正在处理的现有代码库中掌握一个去盎司函数,但我有一个问题,在看它的时候我无法理解。在此场景中,
(…args)
是什么?我知道这是一个rest参数,但它来自哪里?这里的
args
的用途是什么?为什么它不能是空的,然后像setTimout中的
fn()
那样调用呢

const debounce = (fn, delay) => {
    let id;
    return function(...args) {
        if (id) {
           clearTimeout(id)
        }
        id = setTimeout(() => {
           fn(...args);
        }, delay);
    }
}

从debounce()返回的函数应该与提供的函数完全相同,只是我们限制了调用它的频率。这意味着,如果原始函数应该包含两个参数,那么返回的函数也应该包含两个参数。这就是为什么使用spread

作为一个简单的例子,让我们考虑一个包装函数,它只将1添加到返回的任何东西。

function alsoAdd1(fn) {
  return function(...args) {
    return fn(...args) + 1
  }
}
要使用它,我们可以执行以下操作:

> multiplyAndAdd1 = alsoAdd1(function(x, y) { return x * y })
> multiplyAndAdd1(2, 3)
7
> doubleAndAdd1 = alsoAdd1(function(x) { return x * 2 })
> doubleAndAdd1(2)
5
请注意,我们将多少参数传递到包装函数(如double和DD1)并不重要,它们都会传递到原始函数(double函数)。这是因为我们使用的是扩展运算符

如果我们看一下AlSoad1的定义,就会发现它将返回一个接受任意数量参数的函数,并将它接收到的所有参数传递到函数包装中


debounce()函数也在做同样的事情,只不过还有一点点。这些包装器函数可能有点棘手,因此请慢慢浏览上面的示例,看看您是否能理解它们的作用。

从debounce()返回的函数应该与提供的函数完全相同,除了我们限制它被调用的频率。这意味着,如果原始函数应该包含两个参数,那么返回的函数也应该包含两个参数。这就是为什么使用spread

作为一个简单的例子,让我们考虑一个包装函数,它只将1添加到返回的任何东西。

function alsoAdd1(fn) {
  return function(...args) {
    return fn(...args) + 1
  }
}
要使用它,我们可以执行以下操作:

> multiplyAndAdd1 = alsoAdd1(function(x, y) { return x * y })
> multiplyAndAdd1(2, 3)
7
> doubleAndAdd1 = alsoAdd1(function(x) { return x * 2 })
> doubleAndAdd1(2)
5
请注意,我们将多少参数传递到包装函数(如double和DD1)并不重要,它们都会传递到原始函数(double函数)。这是因为我们使用的是扩展运算符

如果我们看一下AlSoad1的定义,就会发现它将返回一个接受任意数量参数的函数,并将它接收到的所有参数传递到函数包装中


debounce()函数也在做同样的事情,只不过还有一点点。这些包装器函数可能有点让人费解,因此,试着慢慢地浏览上面的例子,看看你是否能理解它们在做什么。

因为有时候你可能想用参数调用你的去模糊函数?因为有时候你可能想用参数调用你的去模糊函数?@scotty…解释得很好,非常感谢much@scotty...brilliantly我解释过了,非常感谢