Split Variable

練習用的 REPL

function distanceTravelled(scenario, time) { let result; let acc = scenario.primaryForce / scenario.mass; // acc 賦值一次 let primaryTime = Math.min(time, scenario.delay); result = 0.5 * acc * primaryTime * primaryTime; let secondaryTime = time - scenario.delay; if (secondaryTime > 0) { let primaryVelocity = acc * scenario.delay; acc = (scenario.primaryForce + scenario.secondaryForce) / scenario.mass; // acc 賦值第二次 result += primaryVelocity * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime; } return result; }

把一個變數變成多個變數,每個負責不同任務。

function distanceTravelled(scenario, time) { let result; const primaryAcceleration = scenario.primaryForce / scenario.mass; // 先將 acc 改名字,並且用 const let primaryTime = Math.min(time, scenario.delay); result = 0.5 * primaryAcceleration * primaryTime * primaryTime; let secondaryTime = time - scenario.delay; if (secondaryTime > 0) { let primaryVelocity = primaryAcceleration * scenario.delay; let acc = (scenario.primaryForce + scenario.secondaryForce) / scenario.mass; result += primaryVelocity * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime; } return result; }
function distanceTravelled(scenario, time) { let result; const primaryAcceleration = scenario.primaryForce / scenario.mass; let primaryTime = Math.min(time, scenario.delay); result = 0.5 * primaryAcceleration * primaryTime * primaryTime; let secondaryTime = time - scenario.delay; if (secondaryTime > 0) { let primaryVelocity = primaryAcceleration * scenario.delay; const secondaryAcceleration = (scenario.primaryForce + scenario.secondaryForce) / scenario.mass; // 將第二個 acc 改名字,也用 const result += primaryVelocity * secondaryTime + 0.5 * secondaryAcceleration * secondaryTime * secondaryTime; } return result; }

另外一種情況會發生在參數傳遞過程。

function discount(inputValue, quantity) { if (inputValue > 50) inputValue = inputValue - 2; if (quantity > 100) inputValue = inputValue - 1; return inputValue; }
function discount(originalInputValue, quantity) { let inputValue = originalInputValue; // 先 clone 一份 if (inputValue > 50) inputValue = inputValue - 2; if (quantity > 100) inputValue = inputValue - 1; return inputValue; }
function discount(inputValue, quantity) { let result = inputValue; // 改名字 if (inputValue > 50) result = result - 2; // 這裡仍用 inputValue,表明我是要跟 parameter 比對 if (quantity > 100) result = result - 1; return result; }