有一种方法可以保持函数参数未声明

时间:2016-10-18 20:58:34

标签: javascript syntactic-sugar

我正在寻找一种在不声明一个或多个参数的情况下声明函数的方法。这将用于你正在实现一个你不关心(例如)第一个参数的值的函数的情况。

例如,给定此功能:

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>

2 个答案:

答案 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,则必须使用第二个参数;没有办法解决这个问题。