我無法弄清楚如何更新我正在處理的JavaScript計算器的全局變量。我知道使用eval會使這變得更容易,但是從我在線閱讀的內容來看,不建議從用戶輸入中評估。更新全局變量爲javascript計算器
我的想法是存儲操作前來的第一個數字點擊。點擊後,存儲第二個數字,然後查看用戶出現的操作,其中'='或'+/* - '執行相應的操作。我還沒有完成CE或AC或'。'按鈕呢。完全沒有意義,如果我不能更新全局變量。
在函數本身中,我可以改變變量firstNum和secondNum。 從我在線閱讀的內容中,我相信我不會更改全局變量,而是變量的本地實例。
我希望能指出正確的方向來完成這件事。我試圖將數字存儲在一個對象中,然後在需要執行操作時引用該對象,但我不相信自從我收到參考錯誤後我做得很對。
預先感謝您。
var theParent = document.querySelector("#container");
var display = document.querySelector("#display");
theParent.addEventListener("click", doSomething, false);
var reg = new RegExp('^\\d+$');
var result=0;
var symbol='';
var firstNum=0;
var secondNum=0;
function doSomething(e) {
if (e.target !== e.currentTarget) {
var clickedItem = e.target.innerHTML;
if (reg.test(clickedItem)) {
if (display.innerHTML==="0"){
display.innerHTML=clickedItem;
}
else {
display.innerHTML+=clickedItem;
}
}
}
if (clickedItem==='='){
console.log('check firstNum:' +firstNum);
console.log('check symbol:'+ symbol);
console.log('operations return: '+ operations(symbol));
result= operations(symbol);
console.log('result: '+ result);
display.innerHTML=result;
firstNum=result;
secondNum=0;
symbol='';
}
if (!(reg.test(clickedItem))&&symbol===' '&&clickedItem!=='=')
{
symbol=clickedItem;
display.innerHTML='0';
console.log('first op '+ symbol);
}
if (!(reg.test(clickedItem))&&symbol!==clickedItem&&clickedItem!=='=') {
solve(symbol);
symbol=clickedItem;
console.log('second op '+symbol);
}
if (symbol===''){
//firstNum = parseInt(display.innerHTML);
setFirstNum();
console.log("this firstNum in If: " +firstNum)
}
else if (reg.test(clickedItem)){
setSecondNum();
console.log("this secondNum in If: " +secondNum)
}
else {display.innerHTML='0';}
e.stopPropagation();
}
function setFirstNum(){
window.firstNum=parseInt(display.innerHTML);
}
function setSecondNum(){
window.secondNum=parseInt(display.innerHTML);
}
function operations(symbol){
var operation=[{
'+': firstNum + secondNum ,
'-': firstNum - secondNum ,
'÷': firstNum/secondNum ,
'X': firstNum*secondNum
}];
return operation[symbol];
}
function solve(symbol){
result=operations(symbol);
display.innerHTML=result;
firstNum=result;
secondNum=0;
}
你可以使用eval來達到這個目的;這將是eval()的最佳用法之一,並使許多事情變得更簡單。要避免的是eval()其他用戶的內容,而不是你自己的;任何人都可以按[F12]來運行他們自己的代碼... – dandavis