正在跳过回调函数中的参数
Skipping parameters in callback function
我正在使用的回调函数具有以下签名(来自http://api.jquery.com/load/):
complete(responseText, textStatus, XMLHttpRequest)
现在,我只需要第三个参数。在Lua中,有一种惯例,使用下划线来跳过函数中不需要的返回值(之所以跳过,是因为_实际上会保存该值):
var1, _, _, var4 = func()
所以我想用JavaScript做一件类似的事情,并将我的函数签名设置为:
function (_, _, XMLHttpRequest)
这种方法有什么问题吗?也许有更好/更干净的方法?
这项技术并不漂亮,但我自己也曾多次使用过。我想给那些未使用的参数起有意义的名字还是更好的(只是为了避免混淆),但你可以使用下划线。
我经常在jQuery相关的回调中看到它的使用,其中index
经常作为第一个参数传入,比如
$('.foo').each(function(_, node) {
});
因为大多数时候,你并不关心那里的指数。因此,为了回答你的实际问题,使用这种技术没有错(除了困惑之外),也没有更好/更干净的方法来跳过不必要的争论。
我承认使用_
是一种常见的模式,可以省略在所需参数之前的参数。这对一个参数来说很酷,也许是2。
somethingWithACallback((_, whatIAmLookingFor) => {
// ...
})
但我需要第五个。这意味着我必须写
somethingWithACallback((_, __, ___, ____, whatIAmLookingFor) => {
// ...
})
对于这种情况,我提出了这种模式:
somethingWithACallback((...args) => {
const whatIAmLookingFor = args[4];
})
有了销毁,你也可以做这个
somethingWithACallback((...args) => {
const [,,,,whatIAmLookingFor] = args;
})
并将其应用于多个参数
somethingWithACallback((...args) => {
const [,,,,whatIAmLookingFor,,andAnotherThing] = args;
})
从而基本上选择你需要的东西。
您使用的是两个名称相同的参数。你应该这样写:
function (_, __, myXhr)
您可以将变量定义与数组析构函数相结合。
something((...[,,req]) => { /* req.blah */ }
如果使用Typescript,则需要为参数添加类型定义,并且可以是泛型的:
something((...[,,req]: any[]) => { /* req.blah */ })
或特定:
something((...[,,req]: [ResponseText, TextStatus, XMLHttpRequest]) => { /* req.blah */ })
或者,当您放弃非必需的参数时,您可以使用any
(或unknown
)来表示以下参数:
something((...[,,req]: [any, any, XMLHttpRequest]) => { /* req.blah */ })
如果你觉得冗长,那么引入一种类型:
type Params = [ResponseText, TextStatus, XMLHttpRequest]
something((...[,,req]: Params) => { /* req.blah */ })
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 函数未将值作为参数传递
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 为什么不'我们在javascript中使用函数参数的数据类型
- 你好,这是测试用例,我必须在函数中传递n个参数
- JavaScript - 多参数函数,它是多个图像库的字符串
- 如何从两个参数函数返回随机整数
- 以无点风格在Ramda中编写一个无参数函数
- JS:将单参数函数转换为可链接函数
- 正则表达式类似于Javascript中的参数函数
- 将 $' 值传递给替换的关联参数函数
- "这个“;在参数函数中
- 如何向jquery插件发送参数函数
- 将参数函数Node.js从一个js传递到另一个js
- 如何在javascript参数函数中传递PHP post方法字符串
- 装饰 Javascript Promise.then 以便参数函数接收附加参数
- 正在分析setInterval ID'是的's参数函数
- 如何根据一个参数函数计算年龄
- 对象参数/函数和/或三元运算符混淆