我正在寻找一种在不声明一个或多个参数的情况下声明函数的方法。这将用于你正在实现一个你不关心(例如)第一个参数的值的函数的情况。
例如,给定此功能:
function foo(this_arg_is_unused, important_arg) {
doSomethingWith(important_arg);
}
有没有办法宣布它更像这样?
function foo( , important_arg) {
doSomethingWith(important_arg);
}
我意识到我可以很容易地做到这一点:
function foo() {
doSomethingWith(arguments[1]);
}
然而,开始变得不那么可读,并且(例如)使用fn.js来讨论参数会更加困难。
我目前正在考虑也许我可以使用视觉助记符来表明该参数未被使用:
function foo(ø, important_arg) {
doSomethingWith(important_arg);
}
然而,这也可能存在可读性问题。
真实世界的例子:
jQuery's .each()使用的回调函数有两个参数,第一个是数组/对象中的索引或属性名,第二个是值。要操纵一些div
元素,您可能会执行以下操作:
$($('div').each(function(index, value) {
console.log(value); // equivalent to doSomething(this)
}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Nothing here</div>
使用箭头功能(无法使用参数[])
$($('div').each((ø, value) => console.log(value)));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Nothing here</div>
答案 0 :(得分:0)
您不能在函数参数中留下空格。占位符参数效果很好。
如果您不想这样做,您可以编写一个更高阶的函数来包装函数,以期望第一个抛弃的参数:
function withExtraArg(f, thisValue = null) {
return (x, ...args) => f.call(thisValue, ...args);
}
使用自然数量的参数编写函数:
function withExtraArg(f, thisValue = null) {
return (x, ...args) => f.call(thisValue, ...args);
}
// your function
function log (value) {
console.log(value)
}
$($('div').each(withExtraArg(log)));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Nothing here</div>
答案 1 :(得分:0)
有没有办法让函数参数未声明?
没有。只是省略它是语法错误。
也许我可以使用视觉助记符来表明参数未被使用
是的,这是正确的方法。未使用参数的惯用名称是下划线_
,从其他语言中可以看出它具有特殊含义(甚至可以多次使用):
function foo(_, important_arg) {
真实世界的例子:jQuery的
使用的回调函数.each()
是的,jQuery搞砸了回调的参数顺序,通常值先行。在jQuery中,值在零参数中 - this
值,因此惯用的jQuery是
$('div').each(function() {
console.log(this);
});
如果由于某种原因无法使用this
,则必须使用第二个参数;没有办法解决这个问题。