У вас проблема с асинхронностью.
var i = 0;
console.log(1, 'запрос отправляется')
VK.api('groups.getById', {group_id: 'live'}, function (r){
i = r.response[0].id;
console.log(4, i); // здесь сработает правильно, но только после ответа с сервера
return i;
});
console.log(2, 'ответ на запрос еще не пришел, а вы уже пытаетесь использовать переменную i')
console.log(3, i); // выведет 0
UPD: по поводу
i = VK.api() - конечно же не работает.
У вас
return i;
внутри анонимной функции, которая используется как callback параметр для VK.api()
Что именно возвращает VK.api() можно посмотреть в их исходниках или документации. Может и вообще ничего не возвращает.