首页 > 解决方案 > 从函数中提前返回:null、显式未定义、隐式未定义?

问题描述

var input = document.getElementById("input").value;

function sendRequest {
  if (Validate.isNumber(input)) {
    input.focus();
    return;
  }

  // or

  if (Validate.isNumber(input)) {
    input.focus();
    return null;
  }

  // or

  if (Validate.isNumber(input)) {
    return input.focus();
  }

  // start Ajax call
  var xhttp = new XMLHttpRequest();
  ...
}

以上3个函数具有相同的结果(如果验证失败结束函数执行)......那么有什么区别?哪一个更好?

标签: javascripthtmlperformance

解决方案


EsLint 有个很好的规则:consistent-return

要求 return 语句总是或从不指定值。如果函数中的任何代码路径显式返回值,但某些代码路径没有显式返回值,则可能是输入错误,尤其是在大型函数中

Airbnb JavaScript 风格指南

// No implicit return with side effects
function foo(callback) {
  const val = callback();
  if (val === true) {
    // Do something if callback returns true
  }
}

那么我们应该白白回报什么呢?

在 JavaScript 中,undefined表示变量已被声明但尚未被赋值。

null是赋值。它可以分配给一个变量作为没有值的表示。

空与未定义

TLDR:。return null_

PS也看看Null object pattern。如果成功路径返回 Promise,则负路径可以return Promise.resolve(null)- 如果函数的使用者已经检查了 Promise 中的值并且不在乎为什么它为空。


推荐阅读