【问题标题】:What is the meaning of an Underscore in javascript function parameter?javascript函数参数中下划线的含义是什么?
【发布时间】:2015-02-22 13:52:54
【问题描述】:

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

例如

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

有人可以更新一下吗...谢谢。

【问题讨论】:

  • 所以@GabyakaG.Petrioli,如果您使用任何参数调用该函数,无论类型如何。参数..它会调用那个函数吗?
  • 具体函数中如果不传参数会立即返回lines.x,如果传多个则只使用第一个传给lines.x和@987654324 @ 最后返回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 的回答是不正确的,因为_ is 实际上用在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

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2016-09-30
    • 2017-11-27
    相关资源
    最近更新 更多