Если вы не хотите передавать требуемые переменные в качестве параметров, вам нужно убедиться, что вызываемая вами функция находится в той же области (или ниже), что и те, где эти переменные определены.
Таким образом, в вашем случае, если вы поместите определение var f = ...
в немедленно выполняемую функцию в скобках, оно будет в той же области видимости, что и переменная a
. Я не уверен, насколько это соответствует заявлению if
, которое вы упомянули, но не включили в пример кода, но вы можете сделать что-то вроде этого:
(function(){
var f = function(){ alert(a); };
// other code here if you have any
var a;
if ("your if condition" == "something") {
a = "abc.";
f();
}
})();
Или просто объявите a
в том же месте, которое вы объявите f
.