我学习JavaScript所以这里的任何帮助,将不胜感激。在下面的代码片段中,我创建了两个对象johnTip和markTip该计算约翰和马克的尖端总结。该方法tipCalculator实现两个对象以相同的方式。但是,调用markTip.calcTip()之后,我发现,tipsJohn将由tipsMark被覆盖,即,它们具有相同的价值观。有谁知道什么是错的场景,背后如何解决这一问题?谢谢。
我试着开关呼吁johnTip和markTip这种方法的顺序,但没有修复的bug。
预期的结果将是tipsJohn和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);
当分配的变量,而不贴花它,它具有全局范围。
x = 5;
打造一个全局变量。
let x = 5;
创建仅具有范围与当前块的变量。
双方你阵列更改为
let tips = [];
let finalBills = [];
他们将不同的阵列。
你宣布var finalBills;
markTip和johnTip之外声明。你需要将它们存储在不同的var
。