Javascript 在参数中声明数组是一种不好的做法吗?

Javascript 在参数中声明数组是一种不好的做法吗?,javascript,Javascript,或 我想问的是调用函数的方法1被认为是错误的(它是否有任何性能影响)。就这一点而言,在参数中声明字符串、对象和函数是一种糟糕的方法。这实际上没有任何区别。无论哪种方式,您都要创建一个Javascript数组,该数组基本上是一个对象,并获得一个引用作为回报(将其传递给您的方法)。如果您以后不需要在代码中访问该数组(或其他数据),那么第二种方法完全可以。这是主观的,但在我看来,使用第二种方法更好 如前所述,代码执行和代码性能没有区别,但第二种方法更容易调试,更容易阅读和理解。arr的内容还会被再次使


我想问的是调用函数的方法1被认为是错误的(它是否有任何性能影响)。就这一点而言,在参数中声明字符串、对象和函数是一种糟糕的方法。

这实际上没有任何区别。无论哪种方式,您都要创建一个Javascript数组,该数组基本上是一个对象,并获得一个引用作为回报(将其传递给您的方法)。如果您以后不需要在代码中访问该数组(或其他数据),那么第二种方法完全可以。

这是主观的,但在我看来,使用第二种方法更好


如前所述,代码执行和代码性能没有区别,但第二种方法更容易调试,更容易阅读和理解。

arr的内容还会被再次使用吗?如果是这样的话,那么选择2肯定是一条路要走。如果不是。。。像这样简单的事情可能只是个人意见

就个人而言,我不得不说选项2是更好的练习,尽管有时我会因为使用选项1而感到内疚。选项2更容易阅读,更容易理解,而且不太可能有人因为在阅读代码时暂时感到困惑或迷失在思维流中而不得不重新阅读它(尤其是较新的程序员)。由于这些原因,它更易于维护,您以及使用您的代码的潜在未来开发人员可能会节省使用它的时间


我能看到的唯一的负面影响是产生的开销非常小,现在你有2行代码而不是1行。但我认为这无关紧要,选项2的微小潜在好处超过了选项1的微小缺点。

性能不是问题,在JS、Ruby等语言中也不是问题。所以我们所能做的就是考虑代码的可读性。这个案例与JS没有很强的关系,我的例子也是如此

var arr = [elem1,elem2];
validationError(arr,type,shiftNo);
这清楚地表明:“如果移动(E2 E4)对这个棋盘有效,那么……”,你甚至不需要看文档就知道了。如果我们在不为数组指定名称的情况下编写,那么结果看起来有点神秘(仍然很容易猜测,但对于这样一个小例子来说就更难了):

这是什么意思?
valid
在这里代表什么?也许,它会问这些单元格是否包含有效的玩家棋子?这是一个设计缺陷的象征,更确切地说是一个糟糕的命名。它对如何使用棋盘代码做出了大胆的假设。通过重命名
棋盘
的方法,我们可以很明显地看出此数组代表了一种移动:

if chessboard.valid(["E2", "E4"], player) {
  ...
}
这会更好,但是您可能没有一个API可以让您的代码在没有额外命名的情况下保持可读性

因此,我建议一条经验法则:

  • 如果数组将被多次使用,请命名它
  • 如果数组的含义从它所在的位置(函数名)不明显,请命名它
  • 除非第1点或第2点适用,否则不要命名它

  • 选项1没有问题。更好的是,如果您以后不打算使用
    arr
    。对我来说似乎很好,没有明确的约定/最佳实践。嗯……我知道从性能的角度来看没有问题……但是编码约定/实践呢……?我想约定是非常主观的。但是如果我们从客观的角度来看,我觉得创建一个数组引用并将其分配到一个局部范围没有多大意义,而我们从来没有在事实之外使用它,将该引用传递给一个函数。所以在我看来,在调用方法时创建Ref是一种“更好”的方法。
    move = ["E2", "E4"];
    if chessboard.valid(move, player) {
      ...
    }
    
    if chessboard.valid(["E2", "E4"], player) {
      ...
    }
    
    if chessboard.valid_move(["E2", "E4"], player) {
      ...
    }