возможен также вариант с сокрытием
<html>
<head>
</head>
<body>
<input id="i">
<button id="change" onclick="f1()">change</button>
<button id="show" onclick="f2()">show</button>
<script>
;(function(){
var state
f1=function(){alert(state=i.value)}
f2=function(){alert(state)}
})()
</script>
</body>
</html>
В этом случае, посторонние программные объекты не смогут модифицировать переменную state.
А в простейшем случае, можно просто использовать window(global). Тогда Вы можете написать просто
<html>
<head>
</head>
<body>
<input id="i">
<button id="change" onclick="f1()">change</button>
<button id="show" onclick="f2()">show</button>
<script>
f1=function(){alert(state=i.value)}
f2=function(){alert(state)}
</script>
</body>
</html>
Это все суть одно и то же.