Dificuldade em Calculadora Javascript

Pessoal, to tentando desenvolver uma calculadora ate que simples, mas to encontrando um bug no meu codigo e nao consigo resolver…

var valor1 = 0, valor2 = 0, operador;

function numPressed(num){
	if(document.calc.visor.value == "0"){
		if(num == "0"){
			document.calc.visor.value = "0";
		}
		document.calc.visor.value = num;
	}else{
		document.calc.visor.value = document.calc.visor.value + num;
	}
}

function opPressed(sinal){
	operador = sinal;
	valor1 = document.calc.visor.value;
	document.calc.visor.value = "0";
}

function calcula(){
	if(document.calc.visor.value == 0){
		alert("Defina um valor para ser calculado!!");
	}else{
		result = null;
		valor2 = document.calc.visor.value;
		
		switch(operador){
			case "+":
				result = parseFloat(valor1) + parseFloat(valor2);
				break;
			case "-":
				result = parseFloat(valor1) - parseFloat(valor2);
				break;
			case "*":
				result = parseFloat(valor1) * parseFloat(valor2);
				break;
			case "/":
				result = parseFloat(valor1) / parseFloat(valor2);
				break;
		}
		
		document.calc.visor.value = result;
	}
}


function limpa(){
	document.calc.visor.value = "0";
	valor1 = "0";
	valor2 = "0";
	result = null;
	operador = null;
}

quando as operaçoes sao as de soma e multiplicação, funciona direitinho…
se eu esolher 1 + 1 e clicar no botao igual, o resultado é 2, depois 3, 4, 5… e assim em diante… da mesma forma multiplicando: 2 * 2 = 4, depois 8, 16, 32…

So que quando vou subtrair, escolho 30 - 1, e clico no igual, vai pra 29, depois 1, depois 29, depois 1, depois 29, depois 1 denovo e assim nao para…

Alguem me ajuda e resolver esse bug? abraços…

Coloca o código completo pra gente ver, por favor. (html + js)