假设有一个函数:
const foo = (arg) => { do_something };
在运行 do_something
之前,我实际上想将 arg
规范化为数组,因为该函数接受字符串或数组以外的类型。
我知道直接修改函数中传递的参数是一种不好的做法,因为它可能会发生变异并导致难以调试的错误。所以,我会做这样的事情:
const foo = (arg) => {
const _arg = Array.isArray(arg) ? [...arg] : [arg];
do_something(_arg)
};
如上所述,我实际上对该数组进行了浅拷贝(arg
),然后使用 _arg
做一些事情,我将确保不会改变它(因为它只是一个浅拷贝)。我的问题是如果我不复制怎么办?即:
const foo = (arg) => {
const _arg = Array.isArray(arg) ? arg : [arg];
do_something(_arg)
};
会有所不同吗?或者哪一种是更好/更健康的编码方式?它会影响垃圾收集或任何性能问题吗?
感谢您的回答。
最佳答案
IMO,建议使用第一种方法,因为如果 do_something
引起一些副作用,第二种方法通常会导致意外问题。
会影响垃圾收集吗?是的。使用第一种方法,_arg
将被清理,因为没有任何内容引用它。我不确定性能。这取决于您处理的数据大小。
关于Javascript:标准化函数中的参数,我应该复制它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49851100/