在JavaScript中,请考虑我试图附加一个新值并返回它。
下面是有关覆盖参数值的示例
下面的函数接收一个字符串值作为参数,并用新值覆盖该参数并返回它。
function test(value) {
value = value + "hi";
return value;
}
console.log(test("Hello"));
下面的函数接收一个字符串值作为参数。我想附加一个新值并返回它。因此,我将值分配给了局部变量,然后将Strong附加到了新变量上并返回了它。
function test(value) {
let temp = value;
temp = value + "hi";
return temp;
}
console.log(test("Hello"));
我正在调用它并传递值
test(“Hello”);
从上方推荐哪个?
答案 0 :(得分:3)
这完全是风格问题。有些人认为您应该不理会参数值,而其他人则认为可以更改它们。¹
从实际角度看,它不会造成任何伤害。也就是说,这样做没有任何隐藏的副作用。特别是,由于JavaScript纯粹是按值传递,因此重新分配参数不会对用于填充该参数的任何参数产生任何影响:
function test(value) {
value = value + "hi";
return value;
}
let a = "let's say ";
let b = test(a);
console.log(b); // "let's say hi"
console.log(a === b); // false, `a` was not modified
您使用temp
的版本可以更简单:
function test(value) {
let temp = value + "hi";
return temp;
}
(甚至
function test(value) {
return value + "hi";
}
,但我认为此问题已高度简化。)
¹(我碰巧是在后一个营地,但那儿不在那儿。)
答案 1 :(得分:1)
是的,这完全没有错,通常是由许多程序员使用多种语言完成的。这是一种常见的做法。
如果要在函数中使用参数值但对其进行某些修改后,可以使用它。
例如,我可能想使用函数add(a, b)
加两个数字,其中a
和b
可以是strings
或integers
或{{1 }}。
但是为了确定这一点,我可以通过以下方式定义floats
函数:
add
并且完全很好。这样,我始终可以确定不会抛出异常,或者如果参数以function add(a,b) {
a = parseFloat(a);
b = parseFloat(b);
return a + b;
}
的形式传递,则实际上它不会返回strings
(如果我说过12
)应该是add(1,2)
。
通过重写参数并将其合并到您的编码样式中,您可以避免浏览器创建或定义新变量,而只是修改这些变量值。这在小型应用中可能没有多大意义,但是在大规模的大型应用中,尤其是在低端设备上,这可能会产生明显的不同。
答案 2 :(得分:1)
简单的答案是:这只是样式问题。
但是,这并非总是 。传递对象时,它们 将通过引用传递,这意味着您对参数所做的每次更改都会影响原始对象:
const obj = {originalValue: true};
function modifyObject(input) {
input.originalValue = false; // The change happens here
return input; // So it will take place regardless of this line
}
console.log('before:', obj);
modifyObject(obj); // See? we don't even retrieve the return value
console.log('after:', obj);
答案 3 :(得分:0)
如果我们在谈论Java,那么创建一个新变量将是一个好习惯。因为有一种叫做垃圾收集器的东西,可以收集未使用的变量等并丢弃它们。因此,保持到原始变量的链接将不允许收集器丢弃该变量。 (我在某处阅读过此书,但有人对我说,它并不是真的可以这样工作,所以如果需要,可以在线阅读更多内容)
但是,在JavaScript中,这并不重要。这取决于你。你的风格。它也取决于情况,因为有时可能会有用。但是,实际上并不重要。随便做。
如果要简化它,可以按照@ T.JCrowder所说的做:
from collections import Counter
def most_occurring_char(string):
counter = Counter(string)
max_char_count = max(counter.values())
is_unique = len([char_count for char_count in counter.values() if char_count == max_char_count]) == 1
if is_unique:
char = [char for char, count in counter.items() if count == max_char_count][0]
return char
return None
# Tests
assert most_occurring_char('abac') == 'a'
assert most_occurring_char('abab') is None
就是这样。
答案 4 :(得分:0)
使用ES6模板文字
function test(value){
return `${value} hi`;
}