Just remove the var
var a = "declared variable";
var fc = function () {
console.log(a);
};
(function () {
a = "hello world";
fc();
}) ();
The var defines the variable in the current scope.
In reaction to the edit, the only way to access the scope is to be in it (or pass it along as an argument). As you don't want to pass it along this is the only other option I see.
var a = "declared variable";
(function () {
var fc = function () {
console.log(a);
};
var a = "hello world";
fc();
}) ();
Or if you would want to pass the scope along a construction like this would work
var a = "declared variable";
var fc = function (scope) {
console.log(scope.a);
};
(function () {
this.a = "hello world";
fc(this);
}).apply({});
Very technically speaking it's not the scope you're passing along, but this is how it would be done.