【问题标题】:What is the meaning of an Underscore in javascript function parameter?javascript函数参数中的下划线是什么意思?
【发布时间】:2022-12-07 11:28:32
【问题描述】:

我正在浏览一个用 javascript 编写的图表库的代码,其中我看到将下划线 (_) 作为函数参数传递。这意味着什么?

chart.x = function(_) {
  if (!arguments.length) return lines.x;
  lines.x(_);
  lines2.x(_);
  return chart;
};

有人可以更新这个吗...谢谢。

【问题讨论】:

  • 所以 @GabyakaG.Petrioli 如果您使用任何参数调用该函数,无论类型与否。参数..它会调用那个函数?
  • 在具体的函数中,如果你不传参数,它会立即返回lines.x,如果你传了多个参数,那么它只会使用第一个传给lines.xlines2.x,最后返回chart .

标签: javascript


【解决方案1】:

下划线符号 _ 是 JavaScript 中的有效标识符,在您的示例中,它被用作函数参数。

单个下划线是一些 javascript 程序员用来向其他程序员指示他们应该“忽略此绑定/参数”的约定。由于 JavaScript 不进行参数计数检查,因此可以完全省略参数。

这个符号经常(按照惯例)与粗箭头函数结合使用,使它们更加简洁和可读,如下所示:

const fun = _ => console.log('Hello, World!')
fun()

在这种情况下,该函数不需要任何参数即可运行,因此开发人员使用下划线作为约定来表示这一点。同样的事情可以这样写:

const fun = () => console.log('Hello, World!')
fun()

不同之处在于第二个版本是一个没有参数的函数,而第一个版本有一个名为 _ 的参数被忽略。虽然这些是不同的,但第二个版本更安全,如果稍微冗长(1 个额外字符)。

另外,考虑这样的情况

arr.forEach(function (_, i) {..})

其中_ 表示不使用第一个参数。

在使用流行的 lodash 或下划线库时,像这样使用下划线会变得非常混乱。

【讨论】:

  • 如果它被完全省略,那么他将没有任何东西可以传递给lines.x()lines2.x(_)
  • 为了确认我的理解,在这种情况下传递_等同于传递null,而_仅用于美观/可读性?
  • @MarkJackson _ 仍然具有价值。您可以通过声明一个带有记录该参数的参数 _ 的函数来测试它,您会看到它记录了传入的任何内容
  • @MarkJackson:不,_ 并不特别;它是 JS 中的有效标识符,就像 xfoo 一样。这些定义是等效的:a) function f(x) { return x; },b) function f(_) { return _; }。我会说@sagar43 的回答是不正确的,因为_实际上在chart.x 的正文中使用,因此省略参数 (chart.x = function() { ... }) 会改变函数的语义。
  • @sagar43 能否请您详细说明“第二个版本更安全”?
【解决方案2】:

_ 在粗箭头函数中称为一次性变量.这意味着实际上我们正在创建一个变量但只是忽略它。 现在越来越多的开发人员在编写代码时将其用作语法糖或速记,因为编写代码很容易,而且少了一个字符。

除了使用 _,您还可以使用其他变量,例如 temp、x 等

举些例子:

() => console.log('Hello World')



_ => console.log('Hello World')




x => console.log('Hello World')

但就我个人而言,如果不需要参数,我更喜欢使用 () 类型而不是一次性变量。

看看下面的代码,你会更好地理解它。

_作为论据,

  f = _=> {
    return _ + 2 ;
}

f(3) 将返回 5

For better understanding, check wes bos

【讨论】: