Если проверка на состояние радио-баттона принципиальна вне тела функции, то можно навешивать/удалять обработчик на кнопку в соответствии с активным радио-баттоном.
В теле функции в качестве проверки есть строка console.log('function is starting');
Когда первый радио-баттон неактивен, то обработчик события удаляется с кнопки и функция, разумеется, не срабатывает. В консоль ничего не выводится.
Постановка задачи интересная. Почему нельзя проверить активность радио-баттона в теле функции и уже дальше плясать от этого?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="radio" name="rad" id="radio1" >
<input type="radio" name="rad" id="radio2">
<br>
<input type="button" value="go" id="btn">
<script>
var radio1 = document.getElementById('radio1');
var radio2 = document.getElementById('radio2')
var btn = document.getElementById('btn');
function myAlert(){
console.log('function is starting');
alert('hi!');
}
radio1.onchange = function(){
btn.addEventListener('click', myAlert);
}
radio2.onchange = function(){
btn.removeEventListener('click', myAlert);
}
</script>
</body>
</html>