Вы можете вернуть значение из функции, конечно:
function blah() {
var a=1;
return a;
}
Но я предполагаю, что это не совсем то, что вы имели в виду. Поскольку вызов функции создает замыкание над локальными переменными, обычно невозможно изменить значения после создания замыкания.
Объекты несколько отличаются, потому что они являются ссылочными значениями.
function blah1(v) {
setInterval(function() {
console.log("blah1 "+v);
}, 500);
}
function blah2(v) {
setInterval(function() {
console.log("blah2 "+v.a);
}, 500);
}
var a = 1;
var b = {a: 1};
blah1(a);
blah2(b);
setInterval(function() {
a++;
}, 2000);
setInterval(function() {
b.a++;
}, 2000);
Если вы запустите это в среде с консольным объектом, вы увидите, что значение, указанное в blah2, изменяется через 2 секунды, но blah1 просто продолжает использовать то же значение для v.