现在,我进行了以下设置:

var foo = 'bar';
function alertFoo() {
    alert(foo);
};


如果我想限定foo的范围,使其不是全局的,则可以使用以下函数表达式进行操作:

var alertFoo = (function() {
    var foo = 'bar';
    return function() {
        alert(foo);
    }
)();


有没有一种方法可以将该函数表达式转换为类似于第一个代码示例的函数声明?

最佳答案

更新的答案:

发表您的评论:


  在外面的那一个,我想将alertFoo吊起


好吧,你可以这样做:

function alertFoo() {
    var foo = 'bar';

    doTheAlert();

    function doTheAlert() {
        alert(foo);
    }
}


...但是我无法想象这真的适合您的需求。除此之外,不,您无法悬挂它。

原始答案:

是的,您可以在函数表达式中声明该函数,如下所示:

var alertFoo = (function() {
    var foo = 'bar';

    return alertFoo;

    function alertFoo() {
        alert(foo);
    }
}();


或者,您可以声明作用域函数然后调用它,但是随后您将在当前作用域中创建另一个符号:

function scoping() {
    var foo = 'bar';

    return alertFoo;

    function alertFoo() {
        alert(foo);
    }
)
var alertFoo = scoping();

07-24 18:42