始终返回语句/值是JavaScript的良好做法

Is JavaScript good practice to always return statement/value?

本文关键字:JavaScript 值是 返回 语句      更新时间:2023-09-26

我已经开始学习和使用CoffeeScript好几天了,我正在使用以下Coffee-to-JavaScript和JavaScript-to-Coffee转换器,因为我是CoffeeSScript语法的新手。

上面的转换器完美地将JavaScript"翻译"为CoffeScript语法,但我最近需要做相反的事情。因此,我在CoffeeScript到JavaScript转换器功能中传递了以下代码:

$(document).ready ->
  $('.b-date-picker').datepicker
    onSelect: (date) ->
      if $(this).attr('name').indexOf('gteq') > 0
        $(this).parent().next().find('input').datepicker 'option', 'minDate', date
      else
        $(this).parent().prev().find('input').datepicker 'option', 'maxDate', date

结果JavaScript与我最初为获得CoffeScript语法而传递的结果相同,只是几乎每一行都有一个return语句:

$(document).ready(function() {
  return $('.b-date-picker').datepicker({
    onSelect: function(date) {
      if ($(this).attr('name').indexOf('gteq') > 0) {
        return $(this).parent().next().find('input').datepicker('option', 'minDate', date);
      } else {
        return $(this).parent().prev().find('input').datepicker('option', 'maxDate', date);
      }
    }
  });
});

因此,我开始怀疑为什么要放置这些返回。这是否也是转换器中设置的正确JavaScript语法,或者可能有某种优化/性能改进?

CoffeeScript使用"函数语法",因为偶数语句充当表达式。生成的代码是如何在JS中模拟的(实际上,return ?:会更精确,但这是一个更简单的转换)。

现在,考虑一下这个CoffeeScript:

() ->
  if cond
    a()
    undefined
  else
    b()
    undefined

在这种情况下,每个分支映射到每个转换器的return void 0(读作:return undefined)。一个更智能的转换器可以安全地消除这样的返回语句(也就是说,不需要任何JS返回语句来产生等效的结果),但在该工具中没有做到这一点。

如果没有这样一个未定义的值作为最后一个计算的表达式,CoffeeScript就无法知道表达式的未定义结果是否实际使用了,并且必须假设使用了函数的结果,这就是它为每个可能的分支添加返回语句的原因。

然而,在一种没有"函数语法"(比如函数表达式除外)的语言(JS)中,我认为在需要时最好有一个显式返回;这显示了意图。

您不必从JavaScript函数返回值。

转换器可能是高度智能的,并且可能已经看到内部方法调用(对jQuery)返回一个值(它返回jQuery对象),并且该值在其他方面是未使用的,或者它可能过于简化或正在实现特定的实践。