JavaScript常量-作为参数传递或直接使用

JavaScript Constants - pass as argument or use directly?

本文关键字:参数传递 常量 JavaScript      更新时间:2023-09-26

我想知道在JavaScript中使用声明常量的最佳实践是什么。将常量作为参数传递给函数更好,还是使用不传递的常量更好?

我的直觉是不要将常量作为自变量传递,因为这会产生变量的不必要的局部副本。然而,如果常量被传递,它可能会更清楚地从哪里来。

const myConstant = 1;
myFunc();
myOtherFunc(myConstant);
/* use constant without passing */
function myFunc() {
   console.log(`${myConstant} is a constant`);
}
/* pass constant as argument */
function myOtherFunc(localCopy) {
   console.log(`${localCopy} is a constant`);
}

有两个方向的权衡,尽管其中大多数都在单元测试和可重用性领域。

硬编码越多,测试的灵活性就越低。

让我举一个人为的例子:

const FIRST_NAME_MAX_LEN = 20;

在我们的验证代码中,我们查看该常量,并将其与输入字段的长度进行比较。。。

function validateFirstName() {
  return document.getElementsByName("first-name")[0].length <= FIRST_NAME_MAX_LEN;
}

好的,这是可行的,但如果不调用整个DOM,我们就无法测试validateFirstName()是否有效。它更难测试。

另一方面,如果我们创建一个函数,比如:

function validateStringLength(s, maxLength) {
    return s.length <= maxLength;
}

然后,我们创建了一个函数,它接受传递的参数,在其他地方可以重用,并且在任何测试框架中都非常容易地进行测试。DOM不是必需的。

通过依赖常量,您已经根据该值及其所在位置创建了dependency。研究JavaScript Dependency Injection以获得更多关于该主题的信息。