Это не работает, потому что aaa
выходит за рамки fn()
. Что может вас смущать, так это
(function () {
alert(aaa); // 'BBB'
})();
работает, но fn()
нет. Происходит то, что, поскольку «BBB» определено, и , вызываемые внутри foo2
, alert(aaa)
и aaa
, находятся в одной области видимости, и это прекрасно работает.
Учитывая это, у вас есть два варианта:
Объявите aaa
в верхней области:
var aaa = 'BBB';
var fn = function () {
return function () {
alert(aaa);
};
};
var foo2 = function () {
(function () {
alert(aaa); // 'BBB'
})();
fn();
};
Передать aaa
в качестве параметра fn()
:
var fn = function (aaa) {
return function () {
alert(aaa);
};
};
var foo2 = function () {
var aaa = 'BBB';
(function () {
alert(aaa); // 'BBB'
})();
fn(aaa);
};
Вот статья о javascript scoping:
http://www.digital -web.com / статьи / scope_in_javascript /
Надеюсь, это поможет.