выносить за функцию можно но вот это
num1 = document.getElementById('n1').value;
будет выполняться при загрузке когда инпуты пусты.
вынести можно сами элементы, а в функции получать их актуальный на текущий момент value
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body> <input type="text" id="n1">
<input type="text" id="n2"> <br><hr />
<button onclick="plus()">PLUS</button>
<button onclick="minus()">MINUS</button>
<hr>
<p id="out">Result:</p>
<script>
var num1 = document.getElementById('n1'),
num2 = document.getElementById('n2'),
out = document.getElementById('out');
function plus() {
result = num1.value*1+num2.value*1;
out.innerHTML = result;
}
function minus() {
result = num1.value*1-num2.value*1;
out.innerHTML = result;
}
</script>
</body>
</html>