问题描述
我有一组函数,它们相互关联。我想看看在每个函数执行期间变量的值是多少。我不想使用 console.log。
function applydiscountA(itemPrice){
itemPrice = itemPrice*0.95;
applydiscountB(itemPrice);
}
function applydiscountB(itemPrice){
itemPrice = itemPrice*0.85;
applydiscountC(itemPrice);
}
function applydiscountC(itemPrice){
itemPrice = itemPrice*0.85;
console.trace(itemPrice);
}
let itemPrice = 2000;
applydiscountA(itemPrice);
无论如何在 javascript 中是否可以使用 console.trace() 查看在函数调用期间值是如何更新的。
解决方法
不,一旦变量超出范围,您将无法访问其值,也不能使用 trace
。每个 discountX
函数都有自己的 itemPrice
变量,并且只能在该函数范围内访问。
但是,如果您的用例是对原始价格应用多次折扣,并且您想跟踪所有中间结果,则不要使用此模式,而是循环使用百分比,如下所示:
const discounts = [
{ name: "A",pct: 0.95 },{ name: "B",pct: 0.85 },{ name: "C",pct: 0.85 }
];
function applyDiscounts(itemPrice,discounts) {
return discounts.map(function({name,pct}) {
itemPrice *= pct;
return { name,itemPrice };
});
}
let itemPrice = 2000;
let priceEvolution = applyDiscounts(itemPrice,discounts);
console.log("original price",itemPrice);
console.log(priceEvolution);
console.log("final price",priceEvolution[priceEvolution.length-1].itemPrice);