【问题标题】:Should I prefer functions compare to variables in javascript?与 javascript 中的变量相比,我应该更喜欢函数吗?
【发布时间】:2025-11-22 12:45:01
【问题描述】:

我在某个项目中看到一直使用这种语法:

function a() {
    return 'hello';
}
function b() {
    return `${a()} world`;
}
b();

几乎所有变量都被省略了。为什么不使用下面的语法?

const a = `hello`;
const b = `${a} world`;
console.log(b);

用于返回字符串的函数与 const 相比有什么优势,因为我没有看到任何实用的。只有我想到的是 const b 始终执行,而 function b 仅在调用时执行。我错过了什么吗?

【问题讨论】:

  • 这是在什么情况下使用的?即,这是在课堂上吗?
  • 这在很大程度上取决于您如何使用这两个功能。对于硬编码字符串(如您的示例),将它们包装在函数中是没有意义的。但是,如果 function a() 的结果依赖于其他变量,那么将它们放在函数中是有意义的,因为该值仅在调用后才解析。
  • 目的是在反应中创建端点链接,然后导出函数。 f.e.创建链接,例如/api/document/api/file 等。我必须承认,这可能是一个糟糕的方法,但还没有为这种做法找到任何答案。
  • @PavolTravnik 可能是因为端点库需要函数,并且它不知道它们返回常量。他们也可以在每次调用时返回新值。

标签: javascript function constants


【解决方案1】:

如果目的是提供 API 路径,则函数方法提供更大的灵活性。

IE:

您可以根据条件(IE dotENV 数据)切换环境(test/staging/prod)。这在管理 API 的基本 URL 时很有用

function getENV() {
  switch (process.env.NODE_ENV) {
    case 'production': {
      return URL_PROD;
    }
    case 'staging': {
      return URL_STAGING;
    }
    case 'test': {
      return URL_TEST;
    }
    default: {
      return DEFAULT_URL;
    }
}

另一个函数可以将默认的 baseURL 与变量存储的端点混合在一起

IE:

function getEndpointURL(endpoint) {
    return `${getENV()}/${endpoint}`
}

【讨论】:

  • 对不起,这个解释不是我的想法。我想知道,为什么只使用没有参数的简单函数声明而不使用常量。这可能是对资源的非常小的优化,可能什么都没有。
  • @PavolTravnik 函数调用总是比变量查找更昂贵。因此,这将花费更多时间。这种代码的唯一原因是灵活性。
  • 我向你保证,当一个大项目来临时,你会在某些情况下需要简单的字符串(静态端点路径)和在其他情况下需要动态字符串(由函数提供服务)(IE:http/https、baseurl ,身份验证数据等)。因此,您不必选择 const 方法或 func 方法,您将通过混合使用两者来结束。
  • @Rajesh 你又是对的,函数调用更昂贵,唯一的优点是灵活性。无论如何获得的灵活性远远超过您可能失去的性能。
  • @MosèRaguzzini 在这种情况下的另一个优化是拥有一个 url 的 hashMap。 const urlMap = {...}; const defaultUrl = '...'; getENV() { return urlMap[env] || defaultUrl; }。查找比条件语句更快。 ;-) 祝你有美好的一天。
最近更新 更多