我正在学习Javascript,因此这里的任何帮助将不胜感激。在以下代码片段中,我创建了两个对象johnTip和markTip,它们计算John和Mark的技巧摘要。两个对象的方法tipCalculator的实现方式相同。但是,在调用markTip.calcTip()之后,我发现tipsJohn将被tipsMark覆盖,即它们具有相同的值。有谁知道幕后有什么问题以及如何解决这个问题?谢谢。
我尝试切换在johnTip和markTip上调用此方法的顺序,但没有解决该错误。
预期结果将是tipJohn和tipsMark是单独的对象(数组)。但是,在调用markTip.calcTip之后,它们似乎具有相同的值。
var johnTip = {
bills: [124, 48, 268, 180, 42],
calcTip: function() {
tips = [];
finalBills = [];
for (var i = 0; i < this.bills.length; i++) {
if (this.bills[i] < 50) {
tips[i] = this.bills[i] * 0.2;
} else if (this.bills[i] < 200) {
tips[i] = this.bills[i] * 0.15;
} else {
tips[i] = this.bills[i] * 0.1;
}
finalBills[i] = tips[i] + this.bills[i];
}
return [tips, finalBills];
}
}
var markTip = {
bills: [77, 375, 110, 45],
calcTip: function() {
tips = [];
finalBills = [];
for (var i = 0; i < this.bills.length; i++) {
if (this.bills[i] < 100) {
tips[i] = this.bills[i] * 0.2;
} else if (this.bills[i] < 300) {
tips[i] = this.bills[i] * 0.10;
} else {
tips[i] = this.bills[i] * 0.25;
}
finalBills[i] = tips[i] + this.bills[i];
}
return [tips, finalBills];
}
}
let [tipsJohn, finalBillsJohn] = johnTip.calcTip();
let [tipsMark, finalBillsMark] = markTip.calcTip();
console.log('Mark\'s tip summary: ' + tipsMark);
console.log('Mark\'s final bills paid: ' + finalBillsMark);
console.log('John\'s tip summary: ' + tipsJohn);
console.log('John\'s final bills paid: ' + finalBillsJohn);
答案 0 :(得分:0)
您在markTip和johnTip声明之外声明了var finalBills;
。
您需要将它们存储在不同的var
中。
答案 1 :(得分:0)
当您分配变量而不进行缩放时,它具有全局作用域。
x = 5;
创建一个全局变量。
let x = 5;
创建一个仅具有当前块作用域的变量。
将两个数组都更改为
let tips = [];
let finalBills = [];
它们将是不同的数组。