我无法弄清楚如何更新我正在处理的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