--- robots: noindex, nofollow tags: refactoring --- # Split Variable > 練習用的 [REPL](https://repl.it/@yaosiang/SplitVariable) ```javascript= 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; } ``` 把一個變數變成多個變數,每個負責不同任務。 ```javascript= 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; } ``` ```javascript= 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; } ``` 另外一種情況會發生在參數傳遞過程。 ```javascript= function discount(inputValue, quantity) { if (inputValue > 50) inputValue = inputValue - 2; if (quantity > 100) inputValue = inputValue - 1; return inputValue; } ``` ```javascript= function discount(originalInputValue, quantity) { let inputValue = originalInputValue; // 先 clone 一份 if (inputValue > 50) inputValue = inputValue - 2; if (quantity > 100) inputValue = inputValue - 1; return inputValue; } ``` ```javascript= function discount(inputValue, quantity) { let result = inputValue; // 改名字 if (inputValue > 50) result = result - 2; // 這裡仍用 inputValue,表明我是要跟 parameter 比對 if (quantity > 100) result = result - 1; return result; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up